WebRTC 音视频 QoS:GCC 带宽估计与拥塞控制深入剖析和代码实现

课程介绍

这门课程聚焦实时音视频通信中保障 QoS 的核心技术——拥塞控制,以 WebRTC 默认的 GCC(Google Congestion Control)算法为主线。开篇介绍拥塞控制体系架构与基础知识,并从 Google 的相关论文入手;随后动手实现 RTP 头部扩展管理、注册 transport-cc 扩展、写入序列号并解析 Feedback 包,涵盖行程长度与状态矢量两种数据块解码,还会与 Wireshark 抓包结果对比验证解析是否正确。

核心部分逐层实现发送端带宽估计:基于延迟的估计从包组发送与到达时间差计算开始,借助最小二乘线性回归构建 Trendline 单向延迟趋势估计器,完成网络过载检测与阈值自适应调整;AIMD 码率控制覆盖状态机转换、链路容量估计、加性增加、慢启动与乘性降低;此外还有基于贝叶斯估计的吞吐量估计,以及根据 RR 包统计丢包、结合 RTT 调整目标码率的丢包估计。

后续章节把估计出的目标码率更新到 Pacer 和编码器,讲解 ALR 检测及其对吞吐量和延迟估计的优化,再完整实现 Probe 带宽探测:初始化与 ProbeCluster、Pacer 高优先级执行探测、构造 padding 包、Probe 码率估计、主动探测与周期性探测,最后通过配置方式初始化拥塞控制模块并做总结。课程附带 GCC 技术剖析与代码实战的 PDF 讲义。

课程目录

第1章 拥塞控制基础
1.1 拥塞控制体系架构介绍和效果演示
1.2 拥塞控制基础知识
1.3 从google的一篇论文开始学习之旅

第2章 RTP 头部扩展管理
2.1 实现RTP头部扩展的管理功能
2.2 注册transport-cc头部扩展
2.3 详解RTP头部扩展结构
2.4 RTP头部扩展内存分配(1)
2.5 RTP头部扩展内存分配(2)
2.6 RTP头部扩展内存分配(3)
2.7 RTP头部扩展内存分配(4)
2.8 RTP头部扩展内存分配(5)

第3章 写入序列号与解析 Feedback 包
3.1 写入SequenceNumber扩展
3.2 处理Feedback包
3.3 详解Feedback包结构
3.4 解析Feedback包
3.5 行程长度算法解码数据块
3.6 状态矢量算法解码数据块
3.7 解析包时间信息以及还原seq_no

第4章 GCC 模块与 Feedback 数据处理
4.1 创建google拥塞控制模块
4.2 使用观察者模式获得Feedback数据
4.3 同wireshark对比验证数据包解析结果
4.4 feedback数据结构转换
4.5 在发送端记录RTP包的发送状态
4.6 更新RTP包发送后的状态(1)
4.7 更新RTP包发送后的状态(2)
4.8 完成Feedback转换成内部的数据结构

第5章 基于延迟的带宽估计
5.1 创建基于延迟的带宽估计模块
5.2 基于延迟的带宽估计核心原理

第6章 包组时间差计算
6.1 创建包组时间差计算类
6.2 计算包组发送和到达时间差(1)
6.3 计算包组发送和到达时间差(2)

第7章 Trendline 延迟趋势估计与过载检测
7.1 创建trendline单向延迟趋势估计器
7.2 线性回归最小二乘法基本原理
7.3 线性回归最小二乘法样本数据
7.4 线性回归最小二乘法计算trend
7.5 利用trend进行网络过载检测
7.6 过载检测阈值自适应调整
7.7 设计实验观察trend和阈值的变化

第8章 AIMD 码率控制
8.1 创建AIMD码率控制模块
8.2 网络过载时降低码率
8.3 AIMD-判断是否进一步降低码率
8.4 AIMD-未知吞吐量时的码率调整
8.5 AIMD-已知吞吐量时的码率调整
8.6 AIMD-状态机状态转换
8.7 AIMD-估计链路容量
8.8 AIMD-加性增加码率
8.9 AIMD-慢启动模式增加码率
8.10 AIMD-乘性降低码率

第9章 吞吐量估计
9.1 创建吞吐量估计类
9.2 贝叶斯估计的基本思想
9.3 以时间窗口计算样本码率
9.4 贝叶斯估计吞吐量

第10章 基于丢包的带宽估计
10.1 基于丢包的带宽估计核心原理
10.2 根据RR包信息统计丢包指数
10.3 起始阶段的带宽估计
10.4 更新最小码率历史队列
10.5 根据丢包率调整目标码率
10.6 更新丢包率和RTT
10.7 设置发送码率、max和min码率
10.8 更新基于延迟的码率估计值

第11章 目标码率更新到 Pacer 与编码器
11.1 更新估计的目标码率到pacer
11.2 更新估计的目标码率到编码器(1)
11.3 更新估计的目标码率到编码器(2)
11.4 发送端码率估计测试
11.5 周期性更新目标码率到pacer
11.6 发送端码率估计小结

第12章 ALR 检测与估计优化
12.1 ALR检测的基本原理和作用
12.2 创建AlrDetector
12.3 更新ALR状态的开始时间
12.4 设置ALR的带宽估计值
12.5 利用ALR优化吞吐量估计
12.6 利用ALR优化基于延迟的码率估计

第13章 Probe 探测原理与初始化
13.1 Probe的基本原理和作用
13.2 设置起始码率的时候触发探测
13.3 初始化Probe
13.4 创建ProbeCluster
13.5 存储ProbeCluster信息到队列

第14章 Pacer 执行探测与 padding 包
14.1 启动Probe
14.2 Pacer高优执行probe探测任务(1)
14.3 Pacer高优执行probe探测任务(2)
14.4 更新探测执行后的状态信息
14.5 构造padding包(1)
14.6 构造padding包(2)

第15章 Probe 码率估计
15.1 创建Probe码率估计器
15.2 统计Probe结果
15.3 计算Probe码率
15.4 获取和重置Probe码率

第16章 探测机制完善
16.1 完善设置起始码率时的探测
16.2 将probe结果作用到基于延迟的码率估计
16.3 设置码率估计值
16.4 主动请求探测(1)
16.5 主动请求探测(2)
16.6 周期性探测处理(1)
16.7 周期性探测处理(2)
16.8 Probe技术小结

第17章 拥塞控制模块配置
17.1 通过config的方式初始化拥塞控制模块(1)
17.2 通过config的方式初始化拥塞控制模块(2)

第18章 总结
18.1 总结和未来工作

配套资料
音视频QoS优化之WebRTC拥塞控制(GCC)技术深入剖析和代码实战(PDF 讲义)

资源下载
下载价格35 学币
赞助终身VIP免费
常见问题
学币是什么?
1学币 = 1元人民币,可通过每日签到或赞助VIP获得!
如何购买更优惠?
推荐赞助VIP,赞助VIP后再购买超划算-购买会有折扣!(季/年VIP折扣购买,终身VIP免费)
资源能分享给别人吗?
本站资源仅限用于学习和研究目的,不得用于商业或者非法用途,否则,一切后果请用户自负!
遇到问题怎么办?
遇到问题直接点击页面右下角消息按钮联系客服反馈,会在第一时间处理!
0
显示验证码
没有账号?注册  忘记密码?