5月29日 22:54
WebRTC 如何控制音视频质量?码率/分辨率/帧率的动态调节策略是什么?
WebRTC 如何控制音视频质量?码率/分辨率/帧率的动态调节策略是什么?
WebRTC 通过 GCC(Google Congest Control) 算法自动估算带宽,动态调节编码参数,核心机制:
自动调节:
- 带宽探测:发送端逐步增加码率,检测丢包率上升则回退(AIMD 策略)
- 编码器适配:VP8/VP9/H264 编码器根据目标码率自动调整量化参数
- 帧率调节:带宽不足时降低帧率优先保分辨率,极低带宽才降分辨率
手动控制 API:
javascriptconst sender = pc.getSenders()[0]; const params = sender.getParameters(); params.encodings[0].maxBitrate = 500000; // 500kbps params.encodings[0].maxFramerate = 15; params.encodings[0].scaleResolutionDownBy = 2; // 分辨率减半 sender.setParameters(params);
音频处理:
- NetEQ:抖动缓冲 + PLC(丢包隐藏),平滑播放
- AEC:回声消除,防止扬声器声音被麦克风拾取
- NS/ANR:噪声抑制,过滤背景噪声
- AGC:自动增益控制,稳定音量
视频处理:关键帧请求(PLI/FIR)应对丢包,Simulcast 发多路流供 SFU 选择。
追问
- Simulcast 是什么?如何工作? — 同时发送多分辨率/码率流,SFU 按接收端带宽转发对应路
- 如何检测网络质量变差? — 监听 getStats 的 packetsLost、jitterBufferDelay、availableOutgoingBitrate
- AEC 在什么场景下效果差? — 延迟超过 200ms、非线性失真严重、多声源场景
- setParameters 和 replaceTrack 有什么区别? — setParameters 调编码参数不变轨道,replaceTrack 换整个轨道(如切换摄像头)