抗误码技术:
视频传输过程中的错误是不可避免的,抗误码技术历来都足视频领域一个研究的热点。H264标准继承r以前视频编码标准中某些优秀的错误恢复工具,同时也改进和创新了多种错误恢复丁具。这些错误恢复的工具主要有:参数集、数据分割、FMO、冗余片、帧内编码等。
参数集
参数集是H264标准的个新概念,是种通过改进视频码流的结构增强错误恢复能力的方法。其所包含的信息极为重要,它的受损将影响到大量的VCL和NAL单元,且被影响的单元即使能正确接收到也不能被正确解码,在H.264标准中共使用了两种类型的参数集。
(1)序列参数集(SPS),包括与图像序列(定义为两个IDR图像间的所有图像)有关的所有信息,应用于已编码视频序列。
(2)图像参数集(PPS),包括所有属于该图像的片的相关信息,用于解码已编码视频序列中的1个或多个独立的图像。
图像参数集本身也要使用和参考序列参数集中的参数。多个不同的参数集存储在解码器中,解码器通过参考每个已解码片的片头来选择使用恰当的参数集。参数集的灵活使用大大增强了H.264抗误码的性能。在有误码倾向环境下,使用参数集的关键是,在相应的VCL与NAL单元到达解码器时,确保参数集已及时可靠地到达解码器。参数集具体实现的方法主要有:
1、通过带外传输,这种方式要求参数集通过可靠的协议,在首个片解码之前传输到解码器;2、通过带内传输,这需要为参数集提供更高级别的保护,例如发送复制多个分组来保证至少有一个到达目标。由于第一种方法需要额外的一个信道,以及可靠的传输机制,如果条件许可,应用这种传输方式能增强编解码器的抗误码能力,但限于网络资源的现状,采用第二种方式似乎更为合理一些。
数据分割
由于码流中的各语法元素的重要性各不相同,因此可以依据各语法元素的重要性使用不对等保护(UEP)技术来提高解码端的解码效果。在H.264中,一个片最多可以被分为3部分,分别属于A、B和C三类,每部分被单独封装为一个NAL单元。
其中,数据A主要包含头信息,比如宏块类型、量化参数以及运动矢量等,这些参数具有最高级别的重要性。数据B主要包含帧内编码块的编码模式以及帧内编码块的变换系数。这部分数据的丢失将会严重影响其后续帧的解码质量。数据C主要包括帧间编码块的编码模式以及帧间编码块的变换系数。与数据A和数据B相比,这部分数据的重要性最差,然而它却是码流数据的最大组成部分。
可以看出,数据B和数据C都要依赖于数据A的正确接收才有效,而这两部分在语法上是独立的。由于数据A重要性最强,同时其数据量也最小,因此可以使用更可靠的信道来传输或是使用纠错能力更强的码字来保护。事实上,在码流无法完全到达接收端时,数据A的重要性也可以体现在解码端错误掩藏的运用上,这是由于运动矢量在进行时域错误掩藏上是非常重要的,且一般能取得非常好的效果,同时具有很低的运算量。
灵活的宏块排序(FMo)
灵活的宏块排序FMO是H.264的一大特色,适用于H.264的基本档次和扩展档次的应用。H.264标准允许以各种方式将宏块组成片,这样做法的好处是:(1)减小帧内误差传播。由于标准禁止帧内预测在不同片之间进行,这样可以避免一个包错误引起的错误传播至下一个片。(2)有利于解码端错误掩藏的实施。当丢失块以棋盘格或行交织的形式出现(如图2.1l所示)时,解码端采用错误掩藏技术可以取得非常好的重建图像。这是因为在对丢失块进行错误掩藏时主要利用块之间的平滑性来恢复,因此当丢失块周围的块都完好时可以取得不错的效果。在本文后面的试验过程中,正是采用FMO中的棋盘格模式,使得丢失块周围有尽可能多的可参考宏块用于错误恢复。
灵活的宏块排序(FMO)可以看成是做片交织技术的一般形式,它可以任意定义片的形状,其主要目的就是将错误均匀的分散到整帧而不是某个局部区域。图2.11显示的棋盘格和行交织式的FMO形式。当使用FMO时,参数集中将增加一个宏块分配表(MBA.Map),且帧中的每个块都将按照空间光栅扫描顺序依次映射在宏块分配表中,该块在表中的数字代表了块属的片,在图2.11中,“O"代表白色块,“1"代表灰色块。实际上,宏块分配表支持任意形状的宏块组织方式:矩形、棋盘格式、交织行等。FMO的使用,虽然提高了抗误码性能,却是以牺牲编码效率为代价的。因为它打破了原先非邻居MB之间的预测,这在高度优化的环境中,有比较高的延迟。
冗余片(Redundant Slice)
冗余片技术,简单地讲就是,在同一个比特流中,编码器除了片自身中已编码地宏块放置其中外,同一宏块地1个或多个冗余地表示也同时被放置其中,通过利用宏块的1个或多个冗余表示来克服误码造成的不可用片对重构图像的影响。需要注意的是,这些冗余片的编码参数与非冗余片的编码参数不同,例如主片可用低QP(高质量)来编码,而冗余片信息可以用高QP(低质量)的方式编码,这样质量粗糙一些但码率更低。解码器在重构时,首先使用主片,如果它可用就抛弃冗余片;而如主片丢失(比如因为分组丢失)冗余片也能被用于重构。
从上面的说明可以看出,这种冗余片技术与基于冗余的传输,如包复制有着本质的区别。在包复制冗余传输中,被复制的包和复制包一摸一样,而冗余片技术由于其编码参数的选择,具有较低的码率。因此,这种技术是在花销较小比特数的情况下,最大限度地保证重构图像的质量,尤其是在有误码倾向的移动信道或IP信道环境下,采用冗余片技术可以显著提高重构图像的主客观质量。
帧内编码
帧间编码由于充分利用了连续序列的帧间高度相关性,具有很高的编码效率,但是同时也对误码非常敏感,且错误会在帧间迅速传播,使图像质量急剧恶化。与之相比,帧内编码不以任何重建帧为参考,可以有效防止错误扩散问题。因此,H.264也采用帧内编码宏块作为一种抗误码的手段,并较之前标准做了改进。在H.264中,存在两种完全由Intra编码宏块组成的片:传统的帧内编码Slice和IDR帧的Slice。IDR帧的片在进行帧内编码时将完全清空短期参考帧缓存(Short-Term Reference FrameBuffer)内的数据,因此它可以完全去除解码前面帧所带来的积累误差。对于传统的帧内编码Slice,仅可以去除前面解码帧误差对于本帧的影响,这是因为它没有清空短期参考帧缓存,因此在此后帧解码时仍将参考此Intra帧前面的已解码帧,导致误差或错误将向后传播。从这个角度来说,这种Intra帧的同步性要弱于同为Intra编码的IDR帧。
如果在视频序列的编码过程中,在一定时间间隔内插入IDR帧,不仅能改善解码端的视频重建质量,也能起到抑制误码扩散的作用。当然这是以牺牲编码效率为代价的,多帧参考相对于单帧参考能较好的提高编码效率。同时,帧内编码相对于帧间编码方式,其编码效率也大大降低。H.264通过引入帧内编码特别是IDR帧)的方式来提升码流的错误恢复能力是以编码效率为代价的。