一、函数调用关系
gcc获取码率后,码率分配函数调用栈信息如下:
二、具体函数解读
1、RtpTransportControllerSend::PostUpdates
函数配置码率函数
2、GoogCcNetworkController::GetPacingRates
pacing_factor_默认2.5。也就是说pacer发送报文的码率是探测码率的2.5倍。
3、RtpVideoSender::OnBitrateUpdated
根据探测码率、当前帧率、丢包率、rtt环路延时、丢包模型,更新FEC冗余度。
4、FecControllerDefault::UpdateFecRates
实时获取FEC、NACK发送的数据量,计算可剩余留给编码器的码率。
5、RtpVideoSender::ProtectionRequest
实时获取NACK和FEC的码率
6、RtpSenderEgress::UpdateRtpStats
实时更新发送数据的码率
7、VideoSendStreamImpl::OnBitrateUpdated
计算并生效编码码率参数。
三、总结
1、pacer默认是探测码率的2.5倍。
2、FecControllerDefault::UpdateFecRates根据实时统计到的FEC和NACK数据量,计算出冗余数据占有量。探测码率减去冗余码率,剩下的分给编码器。
3、FEC和NACK冗余数据量根据实际需要来,不做流量限制。只是会动态调低编码器码率,降低整体数据的发送量。