一、前言:
音视频服务质量,比较学术的做法就是屏幕MOS值,实际工程中最直观的就是看音频的延迟,视频的卡顿,画质情况。为了保证音视频质量,webrtc做了很多策略,这也是webrtc的核心。
二、完整策略:
WebRTC 的 QoS 策略包含多个维度,包括网络可靠性、带宽与延迟优化、数据传输量减少、编码效率提升等。以下是一个完整的分类整理:
1. 提高网络可靠性
WebRTC 中,为了解决丢包、抖动、网络卡顿等问题,可以采用以下手段:
-
NACK/RTX(基于丢包重传)
NACK(Negative Acknowledgement):接收端报告丢失的 RTP 包,发送端重发数据包(RTX)。
应对小量丢包的常用手段,但当丢包率过高时会额外增加延迟和带宽占用。
-
FEC(前向纠错)
利用冗余编码传输额外的数据,接收端通过冗余数据校正丢失的数据包。适合对丢包敏感的重要视频或音频包。比如,只保护L0级报文。
-
JitterBuffer
用于缓冲音视频帧,平滑网络抖动,保障连续的播放流畅性。
-
NetEQ(音频去抖动缓冲与丢包恢复)
这是 Google 提供的音频网络均衡技术,用于丢包隐藏、抖动缓冲补偿和语音质量优化。
-
PLI/FIR (Picture Loss Indication/Full Intra Request)
接收端向发送端请求关键帧,以恢复图像解码中因丢包导致的严重质量问题。
-
FIR vs. SLI(Slice Lost Indication)
用于更高层面定位数据包损失,以减少丢包带来的解码压力。
2. 动态调整码率与带宽适配
针对 WebRTC 需要适配复杂网络环境,可以通过以下措施优化网络效率:
-
动态码率调整(Bitrate Adaptation)
通过实时检测网络状况,动态调整视频流发送码率,降低高延迟和丢包影响。
-
带宽评估算法
- Transport-cc(RTP Header Extension + RTCP Feedback): 评估双向延迟和传输质量,提供精确带宽预测。
- goog-remb(Receiver Estimated Maximum Bitrate): 接收端根据接收到的包计算发送端的带宽,适合简化的场景。
- 现在webrtc主要使用Transport-cc了。
-
拥塞控制(Congestion Control)
结合 Transport-cc、丢包率和延迟变化的实时拥塞反馈,通过 Google Congestion Control(GCC)算法调整发送速率。
-
主动丢包(Packet Dropping)
根据带宽情况主动丢弃低优先级的数据包(次重要关键帧或高分辨率流)。
-
Pacer(发送速率平滑器)
控制 RTP 数据包发送速率平滑化,避免突发发送引发拥塞。
-
层化消息机制 (Layered Congestion Avoidance)
配合 SVC 或 Simulcast,在网络拥塞时优先发送低分辨率层或关键层,逐步丢弃高分辨率流。
3. 减少数据发送量以适配低带宽
在低带宽场景下,为了更有效地利用网络资源,可以采用以下策略减少传输数据量:
- 优秀的编解码算法
使用高效的视频编解码算法,如:- VP8/VP9:WebRTC 默认支持的高效编解码器。
- H.264/H.265:更高效的压缩率。
- AV1:更先进的压缩算法,在带宽不足的情况下尤为适用。
- SVC(Scalable Video Coding,多层视频编码)
支持分层编码:基础层(低分辨率)+ 增强层(高分辨率)。接收端可以根据网络状况选择订阅不同层的数据。 - Simulcast(多流并行编码)
发送端生成同一内容的多路视频流(如低、中、高分辨率),接收端根据带宽选择接收不同分辨率的流。 - 动态帧率调整(Frame Rate Adaptation)
降低帧率减少数据量,提高低带宽网络下的流畅性。 - 动态量化参数调整(Quantization Parameter Adjustment)
动态调整量化参数(QP 值),在低带宽时优先降低图像质量,确保流畅性。 - 主动噪声过滤(Noise Filtering)
减少视频中的细微噪声(如复杂背景信息),使编码算法更高效。
4. 优化延迟
延迟是实现低时延实时通信的关键问题,可通过以下方法优化:
- 增加缓冲区大小
提高 JitterBuffer 缓冲区容量(通常需要权衡延迟与流畅性)。 - 减少加密握手延迟
- 优化 DTLS 握手(加速 WebRTC 连接初始化)。
- 快速收集并连接优质的 ICE Candidate Pair,避免候选路径切换引发的延迟。
- 优化关键帧间隔(GOP 调整)
在高丢包场景下,降低关键帧间隔以减少观感延迟。
5. 提升音频质量的手段
音频作为实时通信的关键部分,同样需要 QoS 优化:
- Opus 编解码器动态调整
WebRTC 默认使用 Opus 编解码器,可动态降低采样率、调整复杂度,适应不同音频与带宽需求。 - 音频冗余编码(Audio Redundancy Coding, RED)
增加音频数据冗余保护,补偿丢失的音频包,常配合 FEC 使用。 - 音频回声消除与噪声抑制(AEC + ANS)
AEC(Acoustic Echo Cancellation):消除回声干扰。
ANS(Automatic Noise Suppression):自动抑制音频背景噪声。
6. 硬件与设备适配的优化
设备性能对 QoS 也有重要影响,可以通过以下手段优化:
- 硬件加速
利用硬件(如 GPU)完成高效的音视频编解码,减轻 CPU 负载,适配低功耗设备。 - 降低分辨率和帧率的动态调整
在低端设备上使用更低分辨率(如 360p 或以下)和较低帧率(如 15fps)。 - 折中功耗和性能
在移动端优化功耗:优先降低不必要的复杂度或数据量,确保设备流畅运行。
7. 基于 AI 的带宽预测与优化
随着网络实时性优化技术的发展,AI 可以用于 QoS 提升:
- AI 带宽预测
通过机器学习预测网络波动模型,预先调节带宽和码率,减少网络波动导致的质量下降。 - QoS 动态调度控制
使用 AI 动态分配流优先级和计算资源,提高整体通信效率。
三、总结:
WebRTC 的 QoS 策略是一个复杂的多层动态优化过程,以实现实时音视频通信的高质量和低延迟。完整的策略清单涵盖:
- 提高网络可靠性(NACK/RTX、FEC、JitterBuffer 等)。
- 动态调整码率与带宽适配(拥塞控制、Transport-cc、主动丢包等)。
- 降低数据发送量(SVC、Simulcast、动态帧率调整等)。
- 延迟优化(Pacer、DTLS 优化、ICE 节点选择等)。
- 音频质量优化(Opus 自适应、音频冗余编码、回声消除等)。
- 设备性能适配(硬件加速、帧率和分辨率平衡等)。
- AI 带宽预测与 QoS 调优。
通过这些策略的组合,可以最大程度提升 WebRTC 的服务质量,适配各种复杂场景和网络环境。