GoogREMB是基于延时的接收端拥塞控制算法,主要包括以下四个部分:
1.RemoteBitrate Estimator ,是接收端延时拥塞控制算法的管理模块。一方面与外面模块打交道,从网络收/发模块获取RTP包的传输信息用于拥塞评估,或将内部评估的下一时刻的发送码率(大小)输出给网络收/发模块,让其通知发送端进行流控;另一方面,它还要组织内部的Inter Arrival,OverUse Estimator等模块,根据当前观测到的延时差和之前的评估值推测出下一时刻的网络拥塞情况。
Inter Arrival
2.Inter Arrival,进行相邻两组数据包的单向梯度计算。其中包括发送时长,接收时长,数据包大小之差。具体逻辑实现如下
WebRTC 的 InterArrival
类实现了包组的时间差值计算,其对外接口为 ComputeDeltas
。输入每个包的发送时间、到达时间、系统时间、包大小,输出包组的发送时间间隔、到达时间间隔、包组大小差值,供 Trendline
滤波器计算延迟梯度。整个时间差值计算的子过程包括:包的有序性判断、新包组的判断、突发数据的判断。
注意:
计算延迟梯度需要了解包组的概念,在 WebRTC 中,延迟不是一个个包来计算的,而是通过将包分组&