RTCP/RTP (动态码流)
码流控制
1.Webrtc
本文档码流控制思路是借鉴了webrtc拥塞控制技术,先介绍一下它两种拥塞控制技术:
1、基于延迟(delay-based)的拥塞控制算法:算法由数据的接收方实现,接收方需要记录每个数据包到达的时间和大小,并计算每个数据分组之间(inter-group)的延迟的变化,由此判断当前网络的拥塞情况,并最终输出码率估计值由RTCP feedback(TMMBR或 REMB)反馈给发送方;
2、基于丢包(loss-based)的拥塞控制算法:算法则由数据的发送方来实现,发送方通过从接收方周期性发来的RTCP RR(Receiver Report)中获取丢包信息以及计算RTT,并结合TMMBR或REMB中携带的码率信息算得最终的码率值,然后由媒体引擎根据码率来配置编码器,从而实现码率的自适应调整。
综上简而言之webrtc拥塞技术的核心就是接收端基于RTP/RTCP协议通过上述算法计算出RTCP的feedback/RR即网络延迟和丢包,反馈给发送端。发送端根据自身阀值进行调节码流
2.我的方案
思路:发送端发送RTP数据,接收端拿RTP时间戳算延时、RTP***算丢包率。从而得到了网络延迟阻塞和丢包率情况,通过RTCP的feedback/RR反馈给发送端。发送端根据自身阀值进行调节码流
具体实现分解为四步: RTP/RTCP协议完善、码流控制算法的实现、设备端校验阀值的设定,通知设备端上层的联调。
2.1.1.协议完善
目前已经有RTP***,仍需要实现RTP时间戳,实现RTCP Report。
RTP 协议(Real TimeProtocol)提供具有实时特征的、端到端的数据传送服务,可用来传送声音和运动图像数据。在这项数据传送服务中包含了装载数据的标识符、序列计数、时戳和传送监视。RTCP 是 RTP 的控制协议, 基本功能是提供关于数据传输质量的反馈。
2.1.2.算法实现
这一块是需要重新设计。
a、延迟算法,基于RTP的时间戳:设相邻两个数据分组到达接收方的时间间隔为t(i) - t(i-1),而两者被发送的时间间隔则为T(i) - T(i-1),那么就有延迟变量D(i)=t(i)-t(i-1) - (T(i)-T(i-1))。如果D(i) > 0,就说明数据在网络传输时存在延迟的现象,且D(i)应该符合正态分布图,如下:
b、丢包算法,基于RTP的***:***不连续表示丢包,计算相对时间内的丢包率,V(i)= count/time。
time:RTCP的间隔时间,count为丢包数目。UDP存在丢包,即P2P通道需使用丢包率运算。
2.1.3.阀值设定
阀值由下图的两条生命线和丢包率综合得出,需要实际网络测试。
2.1.4.设备联调
目前使用detect_lost_packets(int code)回调告知设备端,此处需要设备端配合调试