ABR 的核心思想
ABR (Adaptive Bitrate, ABR)的本质是:
根据当前网络状况,动态调整音视频编码码率,以在"画质"和"流畅度"之间取得最优平衡。
简单来说:
- 网络好 → 提高码率 → 更清晰
- 网络差 → 降低码率 → 更流畅
其目标不是"最高画质",而是:
最优用户体验(QoE, Quality of Experience)
为什么需要 ABR
在实际网络环境中,存在以下问题:
1. 带宽波动
移动网络、WiFi 环境中带宽变化剧烈:
- 瞬时带宽可能从 10Mbps 掉到 1Mbps
2. 丢包与拥塞
UDP 传输(如 RTP)中:
- 丢包率上升 → 视频花屏
- 拥塞 → 延迟增加
3. 多用户竞争
同一网络下:
- 多个设备共享带宽
- 导致吞吐不稳定
如果没有 ABR:
高码率固定推流 → 网络变差 → 丢包/卡顿/播放失败
ABR 的基本模型
ABR 的核心流程可以抽象为:
网络状态检测 → 带宽估计 → 码率决策 → 编码调整
具体包括:
- 采集网络指标
- RTT(往返时延)
- 丢包率
- 接收速率
- 估算可用带宽
- 选择目标码率
- 调整编码器参数
ABR 的两大实现体系
1. 基于客户端的 ABR(Pull 模式)
典型场景:
- HLS / DASH 点播
客户端根据缓冲区和下载速度选择码率:
清晰度列表:
240p / 480p / 720p / 1080p
特点:
- 实现简单
- 延迟较高(秒级)
2. 基于实时传输的 ABR(Push 模式)
典型场景:
- WebRTC
- 实时直播
特点:
- 毫秒级调整
- 强依赖网络反馈
带宽估计算法
ABR 的关键在于:如何准确估计可用带宽
1. 基于丢包的估计(Loss-based)
原理:
- 丢包率上升 → 网络拥塞 → 降低码率
简单模型:
丢包率 > 阈值 → 降码率
丢包率低 → 增码率
缺点:
- 反应慢(丢包发生后才调整)
- 容易震荡
2. 基于延迟的估计(Delay-based)
原理:
- RTT 增大 → 队列积压 → 拥塞
优点:
- 更早发现拥塞
- 更平滑
3. 基于速率的估计(Rate-based)
根据接收速率:
带宽 ≈ 接收速率
问题:
- 容易被突发影响
4. 混合算法(主流)
现代系统通常结合:
带宽估计 = f(丢包 + 延迟 + 接收速率)
WebRTC 中的 ABR
在 WebRTC 中,ABR 主要由 拥塞控制(GCC) 实现。
1. GCC(Google Congestion Control)
核心思想:
- 基于延迟变化(Delay-based)
- 辅助丢包判断
2. 关键模块
(1)Trendline Estimator
分析延迟趋势:
- 上升 → 拥塞
- 下降 → 空闲
(2)Overuse Detector
判断是否过载:
Overuse / Normal / Underuse
(3)Rate Controller
根据状态调整码率:
- Overuse → 降码率
- Underuse → 升码率
3. 优点
- 响应快(毫秒级)
- 平滑调整
- 适合实时通信
ABR 的控制策略
1. 加性增加、乘性减少(AIMD)
经典策略:
带宽增加:+Δ(慢慢升)
带宽下降:×β(快速降)
优点:
- 稳定
- 避免拥塞
2. 限速与保护机制
避免剧烈波动:
- 最小码率限制
- 最大码率限制
- 平滑滤波
3. 分层编码(SVC)
将视频分层:
Base Layer(低码率)
Enhancement Layer(增强层)
根据带宽:
- 只发 Base → 流畅
- 加 Enhancement → 高清
ABR 与其他机制的配合
ABR 并不是独立工作的,需要与其他模块协同:
1. 与 FEC(前向纠错)
- 网络差 → 降码率 + 增 FEC
- 网络好 → 提码率 + 降 FEC
2. 与 PLC(丢包隐藏)
- 丢包严重 → PLC 掩盖
- ABR 同时降低码率
3. 与 Jitter Buffer
- 延迟大 → 增 buffer
- ABR 降码率减少拥塞
4. 与关键帧策略
- 码率变化 → 请求关键帧(IDR)
- 避免花屏
总结
自适应码率(ABR)是现代音视频系统的核心能力,其本质在于:
通过动态调整码率,使系统在复杂网络环境中始终保持最佳用户体验。
在实际工程中,ABR 需要与以下机制协同:
- 拥塞控制(GCC)
- FEC(前向纠错)
- PLC(丢包隐藏)
- Jitter Buffer(抗抖动)