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协议通过上述算法计算出RTCPfeedback/RR即网络延迟和丢包,反馈给发送端。发送端根据自身阀值进行调节码流

 

 

 

2.我的方案

思路:发送端发送RTP数据,接收端拿RTP时间戳算延时、RTP序列号算丢包率。从而得到了网络延迟阻塞和丢包率情况,通过RTCPfeedback/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)回调告知设备端,此处需要设备端配合调试


猜你喜欢

转载自blog.csdn.net/yuanchunsi/article/details/78850124