算法原理参考https://zhuanlan.zhihu.com/p/80725471
一、输入
OnSentPacket:记录发送端RTP发包结果反馈(PacketNumberIndexedQueue)
OnTransportPacketsFeedback:接收端发送的包,ACK信息(TransportPacketsFeedback)
二、中间结果
RTT,BW:
对每个包用UpdateBandwidthAndMinRtt函数计算RTT和BW,具体实现在BandwidthSampler::OnPacketAcknowledgedInner
BW公式 rate = 数据量/时间间隔
DataSize sent_delta = sent_packet.total_data_sent -
sent_packet.total_data_sent_at_last_acked_packet;
TimeDelta time_delta =
sent_packet.sent_time - *sent_packet.last_acked_packet_sent_time;
send_rate = sent_delta / time_delta;
DataSize ack_delta =
total_data_acked_ - sent_packet.total_data_acked_at_the_last_acked_packet;
TimeDelta time_delta = ack_time - *sent_packet.last_acked_packet_ack_time;
DataRate ack_rate = ack_delta / time_delta;
取send_rate、ack_rate较小的值为根据该RTP包计算的BW值,然后更新max_bandwidth_,max_bandwidth_存较近回合最大的3个BW