拥塞控制的目的是通过修改发送速率,发送数据量或清晰度,压缩数据量等控制网络传输,保证音视频平稳播放,故相关算法需有判断网络状态。输入RTCP包和发送RTP包的结果回调,输出码率(带宽估算)和步调,步调是根据码率得到的,最终步调作用于发送RTP的PacedSender控制RTP的发包速率,码率作用于编解码模块ACM控制包的数据量,所以带宽估算是处理拥塞问题的关键。
代码大致流程:
接收RTCP包
ReceiveSideCongestionController 接收端拥塞控制
RtpTransportControllerSend 发送端拥塞控制
发送端RtpTransportControllerSend
RtpTransportControllerSend初始化了NetworkStatePredictorFactoryInterface,NetworkControllerFactoryInterface,BitrateConstraints
主要处理函数及对应算法的处理函数
OnNetworkRouteChanged-OnNetworkRouteChange
OnNetworkAvailability-OnNetworkAvailability
OnSentPacket-OnSentPacket
OnTransportOverheadChanged
OnReceivedEstimatedBitrate-OnRemoteBitrateReport
OnReceivedRtcpReceiverReport-OnReceivedRtcpReceiverReport OnTransportLossReport
OnAddPacket
OnTransportFeedback-OnTransportPacketsFeedback
ChannelSend::RegisterSenderCongestionCont