5.
GCC { 为防止网络拥塞,控制发送端速率; GCC核心思想是预测发送端带宽和接收端带宽预测来控制发送速率,主要根据丢包率、网络延时、抖动来预测; 发送端带宽估计流程:调用SendSideBandwidthEstimation::UpdateEstimate 1. 收到RR包之后调用,受限于RR的发送频率,大概一秒一次; 2. 定时更新,默认25ms,防止RR包丢失或不及时; 丢包率计算:RR报文携带三个字段,两个RR间隔内的丢包率乘255;目前时刻的累计丢包数24位;目前时段收到的最大序列号,前16位,后16位为循环数; RTT计算,发送端SR携带发送时间戳(RTP时间戳)t_sr,RR回馈SR携带的时间戳,接收端处理延时t_dlrr,这样发送端就可以计算出RTT=recivedtime-t_sr-t_dlrr; 估出发送端总的码率怎么分配到每一个流中:(观察者模式) 几个主要的类:BitrateAllocatorInterface BitrateAllocator BitrateAllocatorInterface VideoSendStreamImpl BitrateAllocatorInterface中有OnBitrateUpdated函数 其中VideoSendStreamImpl继承BitrateAllocatorInterface并实现OnBitrateUpdated函数; VideoSendStreamImpl在VideoSendStreamImpl::StartupVideoSendStream()中调用bitrate_allocator_->AddObserver(this, GetAllocationConfig())将自己注册进BitrateAllocator,当发烧端带宽估计变化时调用VideoSendStreamImpl的OnBitrateUpdated函数,最终作用在编码器上改变码率控制发送端速率。 }6.
RTP/RTCP 协议:
TODO
TCP/IP协议组归纳
SIP协议
SDP协议
Socket编程
webRTC平台开启日志说明
map.emplace().first 原来返回的是迭代器 .second返回插入结果。
Keyframequest调用堆栈