GoogREMB是基于延时的接收端拥塞控制算法,主要包括以下四个部分:
1.RemoteBitrate Estimator ,是接收端延时拥塞控制算法的管理模块。一方面与外面模块打交道,从网络收/发模块获取RTP包的传输信息用于拥塞评估,或将内部评估的下一时刻的发送码率(大小)输出给网络收/发模块,让其通知发送端进行流控;另一方面,它还要组织内部的Inter Arrival,OverUse Estimator等模块,根据当前观测到的延时差和之前的评估值推测出下一时刻的网络拥塞情况。
2.Inter Arrival,进行相邻两组数据包的单向梯度计算。其中包括发送时长,接收时长,数据包大小之差。具体逻辑实现如下
bool InterArrival::ComputeDeltas(uint32_t timestamp,int64_t arrival_time_ms,int64_t system_time_ms,size_t packet_size,uint32_t* timestamp_delta,int64_t* arrival_time_delta_ms,int* packet_size_delta) {assert(timestamp_delta != NULL);assert(arrival_time_delta_ms != NULL);assert(packet_size_delta != NULL);bool