webrtc 记录tips

1. 除特殊需求只有一个pc对象

android出现了No implementation found for void org.webrtc.voiceengine.WebRtcAudioTrack.nativeGetPlayoutData 问题
原因是安卓平台只支持一个音视频模块The reason is that only one audio device module supported on Android.,

2. 如何使分辨率保持不变

  1. RTCConfiguration enableCpuOveruseDetection=false 关闭分辨率变换; 还可以调整源码来实现(包括但不限于固定帧率、定分辨率、自适应调整策略)

关于webrtc中,会根据想要的传输码率来调整 视频分辨率,视频帧率,编码等级, 影响编码码率
核心参数有

  • sdp中的
  1. x-google-max-bitrate 单位bps,下同, 视频码流最大值,当网络特别好时,码流最大能达到这个值,如果不设置这个值,网络好时码流会非常大
  2. x-google-min-bitrate 视频码流最小值,当网络不太好时,WebRTC的码流每次5%递减,直到这个最小值为,如果没有设置这个值,网络不好时,视频质量会非常差
  3. x-google-start-bitrate 视频编码初始值 ,当网络好时,码流会向最大值递增,当网络差时,码流会向最小值递减
  • CPU_OVERUSE_DETECTION_CONSTRANIT 这个参数为ture后webrtc会通过检测cpu进行分辨率或者是帧率的调节,同时会启动码率自适应动态调节分辨率策略。
enum class DegradationPreference {
  DISABLED, //禁用
  // On over-use, request lower resolution, possibly causing down-scaling.
  MAINTAIN_FRAMERATE, //保持帧率,降低码率
  // On over-use, request lower frame rate, possibly causing frame drops.
  MAINTAIN_RESOLUTION, //保码率,降低帧率
  // Try to strike a "pleasing" balance between   or resolution.
  BALANCED,  //平衡
}

深入阅读 保帧率降分辨率 保帧率降码率

3. 最小带宽需求

最差需求 opus is 6kbit/s and for vp8 100kbits/s. 音频正常保持在40-200kbit/s之间,视频至少200kbit/s(最好500kbit/s)

如何计算coturn服务器需要的带宽, 比如计算20M服务器可以几个人会议
比如一般用户上传,一半用于下载, 10M用于下载
//n人每人(n-1)个接收
n(n-1) = 10M/0.5M , n=5, 所以最多支持5人视频会议

4. 分辨率和比特率

webrtc分辨率和比特率

原文地址:https://www.cnblogs.com/WillingCPP/p/14464685.html