APP下载

一种流媒体传输方法研究

2013-09-20王晓西骆新全

关键词:接收端空闲数据包

王晓西,骆新全

(1.中国传媒大学新媒体研究院,北京100024;2.中国传媒大学信息工程学院,北京100024)

1 引言

流媒体[1][2](Streaming Media)就是指在 Internet/Intranet上使用流式传输技术的连续时基媒体(如音频、视频或其它媒体文件)。本文旨在研究其中H.264编码标准格式下视频流的实时传输。实时传输协议(RTP,Real-time Transport Protocol)是在Internet上针对多媒体数据流的一种传输协议。制定RTP协议是为了完成实时传输数据,并提供带有实时特性的端对端数据传输服务。但RTP只完成数据传输的功能,并不对任何媒体提供机制来确保质量。所以,监控服务质量的任务就需要由实时传输控制协议(RTCP,Real-time Transport Control Protocol)来完成。本文就是采用RTP+RTCP的协议架构来实现整体H.264视频传输的。

前人已对实时流媒体传输做出过探索,如文献[3]中就有提到针对H.264视频流的组包方法,文献[4]中将 AIMD(Additive Increase Multiplicative Decrease)算法引入到流媒体传输控制算法中。文献[3]中提及的组包方式参考的是 RFC3894[8]标准,但没有特别做自适应组包处理,本文针对此处进行一些改进。文献[5][6]中在文献[4]基础上对 AIMD 标准算法进行了改进,在网络拥塞和网络空闲两种状态中加入一种网络负载适中的状态,并引入了平滑量,进一步缩短了实时传输处于拥塞下的时间。但由于RTCP包受到网络带宽的限制,需要有一定时间间隔才能发送,本文在此基础上进一步改进,动态改变加性因子,进一步减小传输抖动的可能。

2 RTP数据组包实现

2.1 实时视频传输模型

典型的实时传输模型由发送端和接收端两部分组成,发送端与接收端可以分属于不同的硬件平台,传输模型如下图1所示。传输发送端首先由摄像头实时采集画面,按照某种格式进行压缩,本文采用H.264编码标准,再将压缩后的数据存进buffer中,最后调用RTP协议对buffer中的数据进行组包封装,传送至网络中。同时,发送端还要对接收端传递过来的RTCP数据包进行分析,适时调整编码码率、发送速率及组包方式。在传输接收端,首先将接收到的RTP包进行整合形成可以解码的一帧数据,最后调用播放器播放。在接收RTP数据包的同时,每隔固定的时间间隔回传一次RTCP包,报告此时的网络状态。

本文不对发送端采集编码及接收端解码播放深入研究,而侧重于对视频媒体的传输控制及组包封装。

图1 典型H.264视频流传输框图

RFC3550[9]参考标准对 RTP格式做出了明确规定:RTP数据包由RTP包头和负载两部分组成,要求整个RTP包容量小于最大传输单元(MTU,Maximum Transmission Unit),虽未对负载做出格式要求,但对RTP包头的格式做出明确定义。H.264码流组包的组包策略与RTP格式无太多关系,故不在此做过多论述,具体格式详见文献[9]。

2.2 自适应RTP组包策略

H.264的编码结构在算法概念上分为两层:视频编码层(VCL,Vedio Coding Layer)和网络提取层(NAL,Network Abstraction Layer)。由于本文的工作重点放在了视频流的传输上面,与视频编码关系不大,故不在此过多讲述VCL层,而重点分析针对网络提取层NAL而进行的组包策略。NAL层在语法概念上细分到最后是由一个个NALU(NAL Unit)单元组成的。RFC3984对H.264组包有如下几种策略:

(1)单个NAL单元包:荷载中只包含一个NAL单元。

(2)聚合包:本类型用于聚合多个NAL单元到单个RTP荷载中。

(3)分片单元:用于分片单个NAL单元到多个RTP包。

在NALU的帧头部分通过特定编码方式加以区分是以上那种类型包,由于在实际的视频流中,除了特定的参数集(pps(图像参数集)、sps(序列参数集))以外,NALU都比较大,所以需要对其进行分片处理。文献[7]中使用特定长度对其切割,具有简单易行的特点,但这样简单分割会对整个帧的结构进行破坏,文献[3]中提及对于较大的NALU按GOP方式分割,但是这样分割容易造成前几个包载荷极满,最后一个包载荷很少,在网络带宽压力大的时候,丢包会造成解码图像出现较大面积马赛克。对此本文提出一种综合的组包算法。

首先通过RTCP回传的数据进行分析,判断当前网络状态,按网络优差分两种策略:

(1)当网络良好时,判断当前要发送的NALU与下一个NALU的大小,如果两个加起来也能够通过一个RTP进行发送,则进行聚合包发送,但最多只能是两个NALU,因为过多的绑定在一起,如若丢包,则解码端会有马赛克;如果两个之和大于RTP的最大载荷,则分开单独发送。若一个NALU不能由一个RTP包发送,则需要进行分片处理,但这里与文献[3]不同,而是采用平均分片方式,即接下来几个RTP包平均分摊NALU载荷,同时为了增加每个包的丢包鲁棒性,要在每个RTP中复制图像的参数集。除了两个完整NALU单元可进行聚合分包外,其他数据包不允许同放在一个RTP包中。

(2)当网络压力较大时,丢包率会增加,此时不允许任何NALU进行聚合分包,无论是否当前与下一个NALU之和比一个RTP负载小,都必须分开组包,以确保解码的有效性。

通过上述自适应网络的组包算法,既能够充分利用当前的网络状态,减少RTP包的数量,又能够在网络压力较大时,减少丢包对解码的影响,较前面文献中组包算法有明显优势。

3 拥塞控制算法改进

在实时传输系统中,RCTP协议的反馈机制被广泛应用。接收端周期性的向发送端发送数据包,该数据包包含丢包和分组延时抖动等重要信息。发送端可根据接收到的信息,分析当前的网络状态,从而制定出相应的组包和拥塞控制策略。目前基于探测性拥塞控制算法中最常用是AIMD算法,文献[4]对其描述如下:

设返回的RTCP包包含丢包率为Ploss,它是发送端接收到两次RTCP包的时间间隔内所检测到的丢包情况;IR:发送端的初试速率;MinR:最小速率;MaxR:最大速率;α:加性因子;β:乘性减小因子;Pmax最大丢包率。

根据接收到的RTCP包,输出码率R的调整规则是:

if(Ploss< =Pmax) //网络空闲

R=min{(∂ +R),MaxR};

else //网络过载

R=max{(β*R),MinR};

发送端根据接收端反馈的网络状态的参数,适当的调整发送速率。当网络发生拥塞时,发送速率乘性减小,迅速降低对所需带宽的要求;当网络空闲时,线性增加发送速率,提高发送的效率。但由于只有网络空闲和网络拥塞两种状态,发送端的发送速度总是在不断变化,使得其抖动性很强,这不适合实时传送数据。针对此文献[5]和文献[6]提出如下改进:

对丢包设置上下限:λmax、λmin,当当前的丢包超过了丢包上限值,乘性减小发送包速率,满足当前带宽需求;当当前丢包低于丢包下限值,加性增加发送包速率,以提高发送效率;若丢包处于两者之间时,不对发送速率做任何更改,设为网络适中状态。同时对丢包做平滑低通处理,令Ploss=(1-a)Ploss+aPnew

其中,a(0<a<1)为平滑系数,Pnew为最新一次的丢包。这样,通过调整参数a的值就能够有效的更改最新丢包对最终丢包的权重。具体规则如下:

if(Ploss<λmin) //网络空闲

R={min(R+ α),Max R};

elseif(Ploss>λmax) //网络过载

R={min(R* β),Min R};

else //网络适中

R=R;

通过加入网络适中状态后,会很好的改观发送端发送速率抖动问题,不会因为网络中一点点的变化,而引起发送端巨大的调整。但由于受到接收端发送RTCP数据包有较长时间间隔的局限性,在两次RTCP包中间,发送端会按照某种方式不停的更改发送速率,就有可能在第二次判定丢包时再次发现发送速率不合适,又需要对发送速率进行调整。同时,根据RFC3550标准,不能过分减小RTCP包发送间隔,因为它会占用整个网络的带宽,不利于RTP数据的传输。所以针对于此,本文在前人的基础上进行改进,提出一种带有记忆性质的控制算法。

假设某一个时刻,网络出现拥塞现象,记录下此时发送端发送速率R0。在以后的系统运行中,如果网络空闲并且发送速率远小于R0,则以较快的速率增加发送速率;当发送速率增加到快接近R0时,降低增加的速度,这样会有效的降低网络抖动的可能。具体描述如下:

R=R;

由上式可知,当网络处于空闲状态,并且当前传输速率与记忆中拥塞速率差距较大时会以一个常数线性增加,当增加至快要接近记忆拥塞速率时会按比例减小增加加性因子,保证整个网络状态不至于跳动很厉害。这样,当前的网络状态处于空闲时,有控制的更改加性因子会进一步降低RTP数据包抖动的可能性。

4 总结

RTP/RTCP协议非常适合用于实时流媒体传输,其中RTP协议承担对媒体数据的传输工作,RTCP协议则用来保证传输的质量。本文首先分析了RTP组包特点及标准组包方式,在此基础上提出自适应网络的组包方式,再引入对AIMD算法的优化,提出一种更能有效降低RTP数据包发送速率抖动的方法,提高了传输的平稳性。

[1]宋岩.流媒体技术及其应用[J].西安文理学院学报(自然科学版),2007(10):90-92.

[2]胡书卫.H.264流媒体无线传输研究实现及其在嵌入式视频监控中的应用[D].上海:上海大学,2009.

[3]魏聪颖,牛建伟,吉海星,等.基于实时流媒体传输系统的H.264组包算法研究[J].计算机科学,2007,34(8).

[4]Da peng Wu,Yiwei Thomas Hou,Wenwu Zhu,etal.On End-to-End Architecture for Transporting MPEG-4 Video over the Internet[J].IEEE Trans on Circuits and Systems for Video Technology,2000,10(6).

[5]唐成.基于RTP的MPEG-4视频传输研究[D].西安建筑科技大学硕士学位论文,2004.

[6]董振亚.MPEG-4视频流式传输拥塞控制研究与实现[D].国防科技大学硕士学位论文,2003.

[7]Martini M G,Mazzotti M,Chiani M.Fixed-packet-Iength Transcoding for Error ResiIient Video Transmission over WCDMA Radio Links[C].In:Proc.of Packet Video 2003,Nantes,ApriI 2003

[8]Wenger S,et al.RTP Payload Format for H.264 Video[S].RFC3984,2005.

[9]Schulzrinne H,Casner S,Frederick R.RTP:A Transport Protocol for Real-Time Applications[S].RFC3550,2003.

猜你喜欢

接收端空闲数据包
二维隐蔽时间信道构建的研究*
基于扰动观察法的光通信接收端优化策略
基于多接收线圈的无线电能传输系统优化研究
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
“鸟”字谜
手机无线充电收发设计
西湾村采风
C#串口高效可靠的接收方案设计
彪悍的“宠”生,不需要解释
WLAN和LTE交通规则