关键词: QoS , 视频编码
一、前言
在过去的20年里,Internet、移动通信和多媒体通信获得了前所未有的发展,并获得了巨大的商业成功。移动通信和多媒体技术的融合正在加速进行,诸如网络架构、低功耗的集成电路、功能强大的数字信号处理芯片、高效的压缩算法等方面的研究成果不断涌现。面向无线网络和因特网的视频图像编码与传输技术已成为当今信息科学与技术的前沿课题。
2003年,ISO/IEC的运动图像专家组(MPEG)与ITU-T的视频编码专家组(VCEG)联手制定了最新的第三代视频编码标准H.264/AVC。其主要目的就是为了提供更高的编码效率和更好的网络适应性。在相同重构图像质量下,与H.263+和MPEG-4 ASP标准相比,能节约50%的码流;采用分层模式,定义了视频编码层(VCL)和网络提取层(NAL),后者专为网络传输设计,能适应不同网络中的视频传输,进一步提高网络的“亲和性”。H.264引入了面向IP包的编码机制,有利于网络中的分组传输,支持网络中视频的流媒体传输;具有较强的抗误码特性,特别适应丢包率高、干扰严重的无线视频传输的要求。
二、视频通信容错算法的回顾
目前视频编码压缩标准主要有MPEG-x和H.26x两大系列,这些压缩算法都是基于宏块的,分别从三个方面改善编码效率:
(1)运动估计/运动补偿(MP/MC)消除视频时间冗余;
(2)图像差值的离散余弦变换(DCT)消除空间冗余;
(3)量化系数的可变长编码(VLC)消除统计冗余。
实践表明,通过上述方法,视频编码标准获得了极高的压缩效率。但压缩后的码流在Internet,特别是无线信道上的传输仍然存在着一些棘手的问题,其中比较突出的一点是:一方面,这些压缩后的码流对信道比特误码非常敏感;而另一方面,无线信道由于多径反射和衰落引入了大量的随机误码和突发误码,影响了码流的正常传输。尤其是当采用了VLC方案后,码流更加容易受到误码的影响,结果在解码端将失去与编码端的同步,导致在遇到下一个同步码字之前无法对VLC 码字进行正确的解码;同时预测编码技术会将错误扩散到整个视频序列中,极大地降低重建图像的质量。因此,为了实现良好质量的视频传输,必须结合实际应用信道的传输特性,采取一定的容错措施。
根据在视频传输系统中位置的不同,容错算法主要可分为基于编码器的容错算法,基于解码器的容错算法和基于反馈信道的容错算法。其中:
(1)基于编码器的容错算法,通过再编码比特流中添加冗余信息,这些冗余信息被添加在信源或信道编码器中,降低了编码的效率,增加了实现的复杂度,以换取编码的容错性能,大致包括:分层编码、多描述编码、独立分段编码、再同步编码和前向纠错编码(FEC)等。
(2)基于解码器的容错算法,是指利用被损坏的宏块与其相邻的宏块之间的相关性来完成恢复工作的,这部分工作包括错误检测和错误恢复。对于错误的检测,一般采用针对语法的检错和嵌入数据的检错;对于错误恢复,可采用时域和空域的错误隐藏方法。
(3)基于反馈信道的容错算法,指利用解码器获得误码信息,并通过反馈信道,传送给编码器进行误码处理的一种方式。主要包括:误码跟踪,有条件的ARQ,帧内/帧间编码模式选择和参考图像选择模式等。
与此同时,在信源编码器中,从视频码流结构上研究其抗误码性能,成为近两年来研究的一个热点。H.264/AVC作为最新的视频编码标准,采取了一系列切合实际的技术措施,提高了网络适应性,增强了数据抗误码的顽健性,从而保证了视频传输后的压缩视频的QoS。与以往的视频编码标准不同的是,H.264/AVC标准从系统层面定义了视频编码层(VCL,Video Coding Layer)和网络提取层(NAL,Network Abstraction Layer)。其中,视频编码层独立于网络,主要包括核心压缩引擎和块、宏块和片的语法句法定义。通过引入一系列新特性,不但使H.264的编码压缩效率提升了近1倍,而且多种错误恢复工具又增强了视频流的顽健性。网络提取层的主要功能是定义数据的封装格式,把VCL产生的比特字符串适配到各种各样的网络和多元环境中。涉及片级别以上的语法定义,包括独立片解码所要求的数据表示,类似以往视频压缩标准中的图像和头部顺序数据;防止竞争的编码;附加的增强信息以及编码片的比特字符串。
H.264从框架结构上将NAL与VCL分离,主要有两个目的:首先,可以定义VCL视频压缩处理与NAL网络传输机制的接口,这样允许视频编码层VCL的设计可以在不同的处理器平台进行移植,而与NAL层的数据封装格式无关;其二,VCL和NAL都被设计成工作于不同的传输环境,异构的网络环境并不需要对VCL比特流进行重构和重编码。下面分别就VCL和NAL对于视频传输的QoS进行分析。
三、H.264的视频编码层的错误恢复[1,4]
在H.261、H.263、MPEG-1、MPEG-2、MPEG-4中,许多错误恢复工具已经得到了很好的应用:图像分割的不同形式(片、块组),I模式宏块,片和图像的内插,参考图像选择(带有和不带反馈、图像级别、GOB/SLICE或MB级别),数据分割等。
H.264标准继承了以前视频编码标准中某些优秀的错误恢复工具,同时也改进和创新了多种错误恢复工具。这里主要介绍H.264的错误恢复工具,包括参数集、灵活的宏块排序和冗余片RS等。
1. 参数集
参数集是H.264标准的一个新概念,是一种通过改进视频码流结构增强错误恢复能力的方法。H.264的参数集又分为序列参数集和图像参数集。其中,序列参数集包括一个图像序列的所有信息,即两个IDR图像间的所有图像信息。图像参数集包括一个图像的所有分片的所有相关信息,包括图像类型、序列号等,解码时某些序列号的丢失可用来检验信息包的丢失与否。多个不同的序列和图像参数集存储在解码器中,编码器依据每个编码分片的头部的存储位置来选择适当的参数集,图像参数集本身也包括使用的序列参数集参考信息。
众所周知,一些关键信息比特的丢失(如序列和图像的头信息)会造成解码的严重负面效应,而H.264把这些关键信息分离出来,凭借参数集的设计,确保在易出错的环境中能正确地传输。这种码流结构的设计无疑增强了码流传输的错误恢复能力。
参数集具体实现的方法也是多样化的:(1)通过带外传输,这种方式要求参数集通过可靠的协议,在首个片编码到达之前传输到解码器;(2)通过带内传输,这需要为参数集提供更高级别的保护,例如发送复制包来保证至少有一个到达目标;(3)在编码器和解码器采用硬件处理参数集。
2. 片、片组和FMO
一幅图像由若干片组成,每片包含一系列的宏块(MB)。MB的排列可按光栅扫描顺序,也可不按扫描顺序。每个片独立解码,不同片的宏块不能用于自身片中作预测参考。因此,片的设置不会造成误码扩散。
灵活的宏块排序FMO是H.264的一大特色,适用于H.264的基本档次和扩展档次的应用。
图像内部预测机制,例如帧内预测或运动矢量预测,仅允许用同一片组里的空间相邻的宏块。FMO通过宏块分配映射技术,把每个宏块分配到不按扫描顺序的片中。FMO模式划分图像的模式各种各样,重要的有棋盘模式、矩形模式等。当然FMO模式也可以使一帧中的宏块顺序分割,使得分割后的片的大小小于无线网络的MTU尺寸,经过FMO模式分割后的图像数据分开进行传输。
所有的MB被分成了片组0和片组1,相应地分别采用黄色和白色表示。当白片丢失时,因为其周围的宏块都属于其他片的宏块,利用邻域相关性,黄片宏块的某种加权可用来代替白片相应宏块。这种错误隐藏机制可以明显提高抗误码性能。实验证明,在CIF图像的视频会议中,在丢包率达10%时,视频失真低到需要训练有素的眼睛才能识别。使用FMO的代价是稍微降低了编码效率(因为它打破了原先非邻居MB之间的预测),而且在高度优化的环境中,有较高的时延。
3. 数据分割
通常情况下,一个宏块的数据是存放在一起而组成片的,数据划分使得一个片中的宏块数据重新组合,把宏块语义相关的数据组成一个划分,由划分来组装片。H.264视频编码标准使用了三种不同类型的数据分割。
(1)A型分割
A型分割是头信息划分,包括宏块类型、量化参数和运动矢量,这个信息是最重要的。
(2)B型分割
B型分割是帧内信息划分,包括帧内CBPs和帧内系数。帧内信息可以阻止错误的传播,该型数据分割要求给定分片的A型分割有效,相对于帧间信息,帧内信息能更好地阻止漂移效应,因此它比帧间分割更为重要。
(3)C型分割
C型分割是帧间信息划分,包括帧间CBPs和帧间系数,一般情况下它是编码分片的最大分区。帧间分割是最不重要的,它的使用要求A型分割有效。
当使用数据分割时,源编码器把不同类型的分割安排在3个不同的缓冲器中,同时分片的尺寸必须进行调整以保证小于MTU长度,因此是编码器而不是NAL来实现数据分割。在解码器上,所有分割用于信息重建。这样,如果帧内或帧间信息丢失了,有效的帧头信息仍然能用来提高错误隐藏效率,即有效的宏块类型和运动矢量,保留了宏块的基本特征,从而仍可获得一个相当高的信息重构质量,而仅仅丢失了细节信息。
4. 冗余片方法
H.264中参考图像的选择与以前在H.263中的一样,在基于反馈的系统中,解码器接收到丢失或被破坏的图像信息时,选择参考图像序列中正确的参考宏块,来进行错误恢复;而对于无反馈的系统,H.264提出了冗余分片编码。
冗余分片允许编码器把在同一个码流中添加同一MB的一个或更多冗余表示。需要注意的是这些冗余片的编码参数与非冗余片的编码参数不同,例如主片可用低QP(高质量)来编码,而冗余信息中能用一个高QP(低质量)的方式来编码,这样质量粗糙一些但码率更低。解码器在重构时,首先使用主片,如果它可用就抛弃冗余片;而如主片丢失(比如因为包的丢失)冗余片也能被用于重构。冗余片主要用于支持高误码的移动环境。
5. 帧内编码
H.264中帧内编码大体上类似于以往的视频编码标准,但也进行了重要的改进,主要体现在:
(1)H.264中帧内预测宏块的参考宏块可以是帧间编码宏块,帧内预测宏块并不像H.263中的帧内编码一样,而采用预测的帧内编码比非预测的帧内编码有更好的编码效率,但降低了帧内编码的重同步性能,可以通过设置限制帧内预测标记来恢复这一性能。
(2)只包含帧内宏块的片有两种,一种是帧内片(I Slice),一种是立即刷新片(IDR Slice)。立即刷新片需存在于立即刷新图像(IDR Picture)中。与短期参考图像相比,立即刷新图像有更强壮的重同步性能。
为了更适用无线IP网络环境中的应用,H.264通过采用率失真优化编码和设置帧内预测标志,来提高帧内图像的重同步性能。
四、H.264的网络提取层的错误恢复
NAL支持众多基于包的有线/无线通信网络,诸如H.320、MPEG-2和RTP/IP等。但目前,绝大部分的视频应用所采用的网络协议层次是RTP/UDP/IP,因此在下面的描述中主要基于这个传输框架。下面首先分析NAL层的基本处理单元NALU以及它的网络封装、分割和合并的方法。
1. NAL单元
每个NAL单元是一个一定语法元素的可变长字节字符串,包括包含一个字节的头信息(用来表示数据类型),以及若干整数字节的负荷数据。一个NAL单元可以携带一个编码片、A/B/C型数据分割或一个序列或图像参数集。
NAL单元按RTP序列号按序传送。其中,T为负荷数据类型,占5bit;R为重要性指示位,占2个bit;最后的F为禁止位,占1bit。具体如下:
(1)NALU类型位
可以表示NALU的32种不同类型特征,类型1~12是H.264定义的,类型24~31是用于H.264以外的,RTP负荷规范使用这其中的一些值来定义包聚合和分裂,其他值为H.264保留。
(2)重要性指示位
用于在重构过程中标记一个NAL单元的重要性,值越大,越重要。值为0表示这个NAL单元没有用于预测,因此可被解码器抛弃而不会有错误扩散;值高于0表示此NAL单元要用于无漂移重构,且值越高,对此NAL单元丢失的影响越大。
(3)禁止位
编码中默认值为0,当网络识别此单元中存在比特错误时,可将其设为1,以便接收方丢掉该单元,主要用于适应不同种类的网络环境(比如有线无线相结合的环境)。例如对于从无线到有线的网关,一边是无线的非IP环境,一边是有线网络的无比特错误的环境。假设一个NAL单元到达无线那边时,校验和检测失败,网关可以选择从NAL流中去掉这个NAL单元,也可以把已知被破坏的NAL单元前传给接收端。在这种情况下,智能的解码器将尝试重构这个NAL单元(已知它可能包含比特错误)。而非智能的解码器将简单地抛弃这个NAL单元。NAL单元结构规定了用于面向分组或用于流的传输子系统的通用格式。在H.320和MPEG-2系统中,NAL单元的流应该在NAL单元边界内,每个NAL单元前加一个3字节的起始前缀码。在分组传输系统中,NAL单元由系统的传输规程确定帧界,因此不需要上述的起始前缀码。一组NAL单元被称为一个接入单元,定界后加上定时信息(SEI),形成基本编码图像。该基本编码图像(PCP)由一组已编码的NAL单元组成,其后是冗余编码图像(RCP),它是PCP同一视频图像的冗余表示,用于解码中PCP丢失情况下恢复信息。如果该编码视频图像是编码视频序列的最后一幅图像,应出现序列NAL单元的end,表示该序列结束。一个图像序列只有一个序列参数组,并被独立解码。如果该编码图像是整个NAL单元流的最后一幅图像,则应出现流的end。
H.264采用上述严格的接入单元,不仅使H.264可自适应于多种网络,而且进一步提高其抗误码能力。序列号的设置可发现丢的是哪一个VCL单元,冗余编码图像使得即使基本编码图像丢失,仍可得到较“粗糙”的图像。
2. H.264中的RTP
上面阐述了NAL单元的结构和实现,这里要详细讨论RTP的载荷规范和抗误码性能。RTP可通过发送冗余信息来减少接收端的丢包率,会增加时延,与冗余片不同的是它增加的冗余信息是个别重点信息的备份,适合于非平等保护机制。相应的多媒体传输规范有:
(1)分组复制多次重发,发送端对最重要的比特信息分组进行复制重发,使得保证接收端能至少正确接收到一次,同时接收端要丢弃已经正确接收的分组的多余备份。
(2)基于分组的前向纠错,对被保护的分组进行异或运算,将运算结果作为冗余信息发送到接收方。由于时延,不用于对话型应用,可用于流媒体。
(3)音频冗余编码,可保护包括视频在内的任何数据流。每个分组由头标、载荷以及前一分组的载荷组成,H.264中可与数据分割一起使用。
RTP的封装规范总结如下:
(1)额外开销要少,使MTU尺寸在100~64千字节范围都可以;
(2)易于区分分组的重要性,而不必对分组内的数据解码;
(3)载荷规范应当保证不用解码就可识别由于其他比特丢失而造成的分组不可解码;
(4)支持将NALU分割成多个RTP分组;
(5)支持将多个NALU汇集在一个RTP分组中。
H.264采用了简单打包的方案,即一个RTP分组里放入一个NALU,将NALU(包括同时作为载荷头标的NALU头)放入RTP的载荷中,设置RTP头标值。理想情况下,VCL不会产生超过MTU尺寸的NAL单元,来避免IP层的分拆。在接收端,通过RTP序列信息识别复制包并丢弃,取出有效RTP包里的NAL单元。基本档次和扩展档次允许片的无序解码,这样在抖动缓存中就不必对包重新排序。在使用主档次时(不允许片的乱序),要通过RTP序列信息来对包重新排序,解码顺序号(DON)的概念现正在IETF的讨论中。
存在如下情况,例如当使用内容预编码时,编码器不了解底层网络的MTU大小,将产生许多大于MTU尺寸的NALU。这就需要涉及NALU的分割和合并。
(1)NALU的分割
虽然IP层的分割可以使数据块小于64千字节,但无法在应用层实现保护,从而降低了非平等保护方案的效果。由于UDP数据包小于64千字节,而且一个片的长度对某些应用场合来说太小,所以应用层打包是RTP打包方案的一部分。目前的拆分方案正在IETF的讨论之中,大致具有以下特点:①NALU的分块以按RTP次序号升序传输;②能够标记第一个和最后一个NALU分块;③可以检测丢失的分块。
(2)NALU的合并
一些NALU如SEI、参数集等非常小,将它们合并在一起有利于减少头标开销。现有的两种集合分组:①单一时间集合分组(STAP),按时间戳进行组合,一般用于低时延环境;②多时间集合分组(MTAP),不同时间戳也可以组合,一般用于高时延环境,比如流应用。
五、结束语
本文针对最新推出的视频编解码标准H.264的抗误码性能进行了分析,可以看到H.264/AVC标准除了拥有高效编码的特性,还引入了一些新工具用于提高错误恢复能力。特别是,参数集、NAL上的NALU的概念、灵活的宏块排序FMO、数据分割以及帧内编码等都极大地提高了复杂网络环境下的抗误码能力。同时,详细介绍了与视频比特流传输密切相关的RTP封装规范,与H.264的NAL紧密结合,提供了对数据封装的指导。通过附加了一些传输层的低开销机制来用于NALU包的高效拆分和聚合。当联合使用这些工具时,可以达到更高的性能,在因特网和恶劣的无线网络上进行高质量的视频压缩也将最终成为现实。
评论
查看更多