H.264 JM模型中丢包算法的研究及改进

2011-08-09 05:04唐贵进朱秀昌
电视技术 2011年13期
关键词:码流包率数据包

唐贵进,朱秀昌

(南京邮电大学 江苏省图像处理与图像通信重点实验室,江苏 南京 210003)

责任编辑:哈宏疆

0 引言

随着通信技术的不断发展,现有网络的带宽和传输质量都得到了很大的提高,然而丢包问题依然是通信网络研究领域中不可避免的问题[1-2]。一般来说,当数据包在网络上传输时,发生丢包的原因大致有两个:拥塞丢包与无线链路差错丢包。前者发生的主要原因是网络上数据传输量过大,导致网络设备传送处理不及时,使得设备队列缓冲区溢出而丢包。这往往造成突发丢包(即连续丢包)。后者的发生又大致分为两种情况,一种是受随机差错(如高斯白噪声)的影响从而造成随机丢包,另一种则是由于移动信号的多径和快衰落等从而造成连续丢包。

H.264是国际电信联盟ITU-T和国际标准化组织ISO联合开发的新一代视频压缩编码标准,JM(jointmod⁃el)[3]是其官方测试源代码,它实现了H.264的所有特性。H.264码流文件有两种格式,分别为附录B格式和RTP打包格式,分别用于模拟数据存储在介质(如DVD光盘)上和网络传输环境中。对于前者,一般不必考虑数据丢失,而对于后者,由于网络的不确定性,往往有数据包丢失[4-6]。为了研究丢包对重建视频质量的影响,从JM13.0模型开始,增加了名称为rtp_loss的丢包工具,可以对RTP打包格式的H.264码流进行丢包。然而,本文在模拟丢包时发现,此丢包工具存在如下3个问题:1)实际的丢包率与所设定的预期值经常会有偏差,且偏差在百分之十以上,当RTP数据包较少时,偏差将更为明显;2)只能模拟随机丢包,不能模拟突发丢包;3)在丢包率不变的情况下,对同一个码流进行多次丢包实验,则每次实验丢弃包的序号总是一样的,达不到随机的效果。本文将对以上3个问题进行分析并提出改进方法。

1 JM模型中的丢包算法

1.1 RTP封装及写入文件的格式

JM模型中对网络抽象层单元(Net Abstract Layer Unit,NALU)的RTP封装方案称为“简单包”方案(即直接将一个NALU放进一个RTP包),而没有采用复杂的RFC3984[7]的方案(依据RFC3984,可以将多个NALU放进一个RTP包或者将一个NALU拆开放进多个RTP包中)。对于RTP包,采用RFC3550【8】格式封装,具体如图1所示。

图1 把一个NALU封装进一个RTP包

对于已经封装好的RTP包,JM中对其又进行了再次封装(这里将此封装样式称为写文件包),然后写入文件中。此处再次封装的格式为(见图2):先写4 byte的包长,之后是4 byte的时间戳,但这个时间戳是固定值,恒为-1(即0XFF FF FF FF),最后是数据体(即RTP包)。每个RTP包写入文件的封装依此类推。

图2 把RTP包再次封装

1.2 丢包算法流程及问题分析

1.2.1 丢包算法流程

在JM的丢包算法中,包含3个必需参数和1个可选参数,其中3个必需参数为:参数1表示H.264的码流文件,参数2表示生成的有丢包的H.264文件,参数3表示设定的丢包率,1个可选参数表示从码流文件的第多少个包后可以开始丢包,即一开始保留多少包不允许丢弃。具体流程如图3所示。

1.2.2 问题分析

对于实际的丢包率与所设定的预期值经常会有偏差问题,从图3中可以看出,JM模型的丢包算法是基于大数定律的,其内容就是在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。结合此算法,就是丢包的数目应该等于设定的丢包率。而大数定理的基本条件就是实验要重复多次,也就是说数据包的数目要尽可能的多,一旦H.264码流文件中RTP包数目较少,则实际的丢包数往往与设定的不能一致。RTP包的数目越少,这种不一致的现象表现得越明显。

对于不能模拟突发丢包问题则比较简单,从图3的流程中可以看出,此算法中没有此功能。

至于在相同丢包率条件下对同一个码流进行多次丢包时丢弃包的序号相同的问题可以这样解释:在图3中有一个“产生一个0~100之间随机数”的功能模块,其在具体代码实现过程中直接调用的rand()函数。而rand()函数在生成随机数序列时,需要一个称为“随机数种子”的参数,如果每次实验时这个参数值一样,则每次实验产生的随机数序列也将一样,反之,则不一样。如果未设定随机数种子,rand()函数在调用时会自动设随机数种子为1,而JM丢包算法的代码中恰恰没有设定随机数种子,因此,每次实验时种子参数值都相同,从而导致在丢包率不变的情况下,对同一个码流做多次丢包实验,其每次产生的丢包序列的序号将完全一样。

鉴于以上分析,提出了本文对解决这3个问题的改进算法。

2 改进的算法

针对前面所述3个问题,笔者提出了解决办法,现分别叙述之:

1)对于丢包数不准确,采用了先计算出丢包数,再严格按照丢包数随机丢包的方法。具体步骤如下:

步骤(1):首先读取H.264码流文件,统计其写文件包的总数N总。

步骤(2):根据设定的丢包率RLS和N总,确定丢包数N L。

步骤(3):产生一个Nstart-N总之间的随机数ilost,并置序号为ilost的写文件包的标志位为“lost”标志,其中

步骤(4):重复步骤3)的过程(如果新产生的随机数与先前产生的随机数相同或者相近,则重新产生随机数,以避免同一个数据包要被丢弃两次以及使丢包的序号看起来更加的随机),直至共设置了NL个“lost”标志位。

步骤(5):依次读取H.264码流文件的写文件包,如果此包的标志位为“lost”,则丢弃该包,否则将该包写入到丢包的H.264码流文件中,直至文件读取结束。

2)对于突发丢包,采用Gilbert-Elliott模型[9](简称GE模型,见图4)生成。

在GE模型中,PG表示当传输通道处于“好”(G)状态时发生数据包遗失的概率;PB表示当传输通道处于“坏”(B)状态时发生数据包遗失的概率;PGB代表传输通道的状态从好变成坏的概率;PBG代表传输通道的状态从坏变成好的概率。在稳态的情形下,传输通道处于“好”的状态和“坏”的状态的概率分别为

因此,对于GE模型而言,整体的平均丢包率为

3)对于每次实验结果都一致的问题,采取给rand函数每次实验时赋不同随机数种子的方法。这个赋值工作在程序中借助srand函数完成,调用srand函数将会把其参数值传递给rand函数的种子。而为了让每次运行程序的种子值是不同的,可以用time函数的返回值作为srand函数的参数,time函数返回从1970年1月1日零时零分零秒到目前为止(即程序执行时)所经过的时间,单位为秒。因为每次运行程序的时间是不同的,从而保证了每次实验时种子值是不同的,也就保证了每次实验生成的丢包序号的不一样。

3 实验结果及分析

下面采用JM15.0对视频foreman.cif进行编码,编码结构为IPPP…,GoP大小为15,QPISlice和QPPSlice均为28,RTP打包方式,每个包长设为100 byte。具体测得的实际丢包率如表1所示。

表1 不同帧数、不同丢包率下本文算法与原算法的实际丢包率

根据表1的数据,计算出两个算法的实际丢包率RLA与设定丢包率RLS的差值RΔ,计算公式为

将差值RΔ图形化表示,结果如图5所示。

由图4可见,JM中算法的实际丢包率与设定丢包率之间的差值较大,而且当帧数较少(即相应的编码生成的数据包较少)时,差值往往更大。而本文算法的差值则远小于原来的算法,差值绝大多数都围绕在0的附近。

接下来测试突发丢包模块以及每次实验所得序列是否不同。以100帧foreman.cif码流为测试对象,设定丢包率为1%。丢包结果如表2所示。

表2 不同实验下本文算法与原算法的丢包序列

从表2中可以看出,本文的突发丢包模块能够正确地模拟连续的丢包。同时,原算法每次实验时丢包序列都一样,而本文算法,不管是随机丢包还是突发丢包,每次实验结果都不一样,从而达到了“随机”的目的。

4 小结

尽管网络通信技术发展迅猛,但是数据丢包始终是其无法回避的问题。本文对H.264建议的参考软件JM模型中丢包算法进行了研究,分析了其存在的问题,并提出了相应的解决办法。实验结果表明,本文的算法能够比较精确地进行随机丢包和突发丢包,并具有随机的效果。

[1]李秀敏,王立,李桂苓.数字电视传送流丢包和丢包率研究[J].电视技术,2005,29(6):43-45.

[2]卢刘明,陆肖元.基于网络丢包的网络视频质量评估[J].中国图象图形学报,2009,14(1):52-58.

[3]H.264/AVC Reference Software[EB/OL].[2010-06-01].http://iphome.hhi.de/suehring/tml/.

[4]LIN T-L,COSMAN P C,REIBMAN A R.Perceptual Impactof Bursty Versus Isolated Packet Losses in H.264 Compressed Video[C]//Proc.15th IEEE International Conference on Image Processing.[S.l.]:IEEE Press,2008:2780-2783.

[5]KANUMURI S,SUBRAMANIAN S G,COSMAN P C,et al.Predicting H.264 packetloss visibility using a generalized linear model[C]//IEEE International Conference on Image Processing,2006.[S.l.]:IEEE Press,2006:2245-2248.

[6]杨林涛,江昊,郭成城,等.基于Markov链Packet-Level的VANET差错预测模型及性能预估[J].电子学报,2009,37(10):2333-2337.

[7]WENGER S,HANNUKSELA M M,STOCKHAMMER T,et al.RTP payload formatfor H.264 video:RFC3984[S].2005.

[8]SCHULZRINNE H,CASNER S,FREDERICK R,etal.RTP:A transport protocolforreal-time applications:RFC 3550[S].2003.

[9]EBERT J-P,WILLIG A.A gilbert-elliotbiterrormodeland the efficient use in packetlevelsimulation:TKN-99-002[R].Berlin:TKN,1999.

猜你喜欢
码流包率数据包
支持向量机的船舶网络丢包率预测数学模型
一种基于喷泉码的异构网络发包算法*
基于Jpcap的网络数据包的监听与分析
数字电视TS码流协议简要分析
电磁线叠包率控制工艺研究
SmartSniff
TCN 协议分析装置丢包率研究
一种比较ASN.1码流差异的方法
基于梯度的CCSDS压缩码流控制算法研究
IRD对TS流的处理