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. 如何使分辨率保持不变
- RTCConfiguration enableCpuOveruseDetection=false 关闭分辨率变换; 还可以调整源码来实现(包括但不限于固定帧率、定分辨率、自适应调整策略)
关于webrtc中,会根据想要的传输码率来调整 视频分辨率,视频帧率,编码等级, 影响编码码率
核心参数有
- sdp中的
- x-google-max-bitrate 单位bps,下同, 视频码流最大值,当网络特别好时,码流最大能达到这个值,如果不设置这个值,网络好时码流会非常大
- x-google-min-bitrate 视频码流最小值,当网络不太好时,WebRTC的码流每次5%递减,直到这个最小值为,如果没有设置这个值,网络不好时,视频质量会非常差
- 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人视频会议