算法原理参考https://juejin.cn/post/6844903679602982925、https://rtcdeveloper.com/t/topic/15587、https://zhuanlan.zhihu.com/p/184924220
一、启动探测带宽
类似BBR 探测模式,设置目标带宽和数据量,对每个包计算带宽,估算实际最大带宽,由ProbeController、ProbeBitrateEstimator类实现。对于慢启动,是否可以用BBR的startup模式快速填满通道,再用GCC的丢包、延时估算带宽?
二、基于丢包带宽估算
输入OnReceivedRtcpReceiverReportBlocks:记录接收端上报的信息,丢包率
调用GoogCcNetworkController::OnTransportLossReport ;SendSideBandwidthEstimation::UpdatePacketsLost
然后用一分段函数计算带宽,比较简单,相关常量可以尝试修改验证效果,需要注意RR丢包情况。
三、基于延时带宽估算
为什么不使用jitterbuff的网络延时评估值r2-r1,使用延时梯度(r2-r1) - (s2-s1),是精度更高吗?还是TransportFeedbackAdapter没有记录RTP时戳,不能计算打包时长?还是使用trendline求的延时变化而不是直方图求的延时?
主要研究GoogCcNetworkController::OnTransportPacketsFeedback,注意那些deprecated、under development的类干扰,难点是TrendlineEstimator类的求延时变化、过载检测、阈值更新。
延时变化:X轴为包到达时刻,Y轴为延时梯度