作者回复: webrtc的带宽预测模块就是开源实现。webrtc的GoogCcNetworkController这个类主要是实现带宽预测算法的。OnTransportPacketsFeedback这个函数就是transport-cc报文反馈之后开始做基于延时和丢包的带宽预测以及最大带宽探测算法的。其实这一块的代码是很复杂的,所以我想通过口头讲述原理来减少一些看代码的难度。你可以对着课程看代码。
作者回复: webrtc中在发送码率小于预估带宽的60%之后每5s探测一次。超过70%之后停止探测
作者回复: 回答的很好
作者回复: 点赞
作者回复: 如果当前需要发送的数据量不够带宽探测的数据量的话是需要使用padding包的,所以是需要额外消耗一些网络带宽的,但是因为探测的时间是非常短的,所以影响不大。 bbr的探测是在probe_bw的周期用1.25倍的pacing_rate来上探的吧,如果数据量不够的话也是需要padding。 gcc有“比较小的带宽调整上去需要一段时间”这个问题是没有最大带宽探测的话有这个问题,因为受限于发送数据量。bbr应该会好很多,因为他很多时候都处于probe_bw的状态,会不断的探测最大的带宽
作者回复: 课程中有介绍的。 “但是下降带宽的时候需要做另外一个事情就是更新当前网络的最大带宽。因为处于下降带宽的过程中,说明当前发送数据量已经达到甚至超过了网络的承受能力。这个时候适合更新网络的最大带宽,将当前的接收码率与之前的最大带宽做加权平均求得当前的最大带宽,并更新最大带宽的标准差。这两个值之后调高带宽的时候需要用。”
作者回复: nack、FIR还有带宽预测肯定要的。fec服务器可以实现也可以只在发送端做。pacer会带来延迟可以根据实际情况是不是需要做。
作者回复: 是最小值,笔误了。多谢兄弟提醒
作者回复: 码率下降快是因为时延抖动导致进入了过载了吗?如果抖动大我觉得需要看看是什么导致抖动大。
作者回复: 指的是前面出现过载时的带宽,意思是到了这里要慢点加,防止又过载了。