1.
GCC算法是大家普遍使用的一个RTC里的拥塞控制算法,它也是开源WebRTC当前默认使用的,算法是主要基于时延+丢包,核心模块有三个:
(1)到达时间滤波器;
(2)过载检查器;
(3)速率控制器。
GCC算法这几年也在不断的更新迭代,早期带宽在接收端估计,发送端在媒体包头上需要携带abs-sendtime,接收端采用的是卡尔曼滤波器,估算出带宽后用REMB协议带回发送端;后来带宽估计在发送端来做,发送端在媒体包头上需要携带统一序transport-sequence-number,然后接收端将收包信息,主要包括收包时间等使用transportCC报文带回发送端,在发送端采用线性滤波器进行相关带宽估计。
因为GCC算法在业界比较成熟,这里我就不多做介绍,简单分享一下我们在实践的过程中发现的几个问题:
(1)带宽估计不够准确,特别是低带宽时会过降;
(2)与TCP竞争会过度退避;
(3)在时延抖动场景,带宽波动大。
当然这些问题,随着GCC的持续优化有些会逐渐被优化,但是有些问题却是在GCC框架下无法解决的。后来,我们关注到了BBR。
https://blog.csdn.net/netease_im/article/details/104844583