2.抗丢包和抗误码方面
参数集、片的使用、FMO、冗余片等关键技术的使用可以大大提高系统的抗丢包和抗误码性能。
(1)参数集:参数集及其灵活的传送方式会大大降低因关键的头信息丢失而造成错误发生的可能。为保证参数集可靠地到达解码器端,可以采用重发的方式多次发送同一参数集,或传送多个参数集。
(2)片(slice)的使用:图像可以划分成一个或几个片。将图像划分为多个片,当某一片不能正常解码时的空间视觉影响就会大大降低,而且片还提供了重同步点。
(3)PAFF和MBAFF:当对隔行扫描图像进行编码时,由于两个场之间存在较大的扫描间隔,这样,对运动图像来说帧中相邻两行的空间相关性相对于逐行扫描时就会减小,这时对两个场分别进行编码会更节省码流。对帧来说,存在三种可选的编码方式,将两场合并作为一帧进行编码或将两场分别编码或将两场合并起来作为一帧,但不同的是将帧中垂直相邻的两个宏块合并为宏块对进行编码。前两种称为PAFF编码,对运动区域进行编码时场方式有效,非运动区域由于相邻两行有较大的相关性,因而帧方式会更有效。当图像同时存在运动区域和非运动区域时,在MB层次上,对运动区域采取场方式,对非运动区域采取帧方式会更加有效,这种方式就称为MBAFF。
(4)FMO:通过FMO可以进一步提高片的差错恢复能力。通过片组(slicegroup)的使用,FMO改变了图像划分为片和宏块的方式。宏块到片组的映射定义了宏块属于哪一个片组。利用FMO技术,H.264定义了七种宏块扫描模式。
阴影部分宏块属于片组0,白色部分属于片组1。假设片组0在传输过程中丢失,由于丢失宏块的相邻宏块都属于片组1,这样差错恢复工具就会有更多的可利用信息来恢复丢失片的数据。片组可以进一步划分为大小合适的片以适应网络的MTU值。
(1)帧内预测:H.264借鉴了以往视频编解码标准在帧内预测上的经验,值得注意的是,在H.264中,IDR图像可以使参考图像缓存无效,之后的图像在解码时不再参考IDR图像之前的图像,因而IDR图像具有很好的重同步作用。
在一些丢包和误码严重的信道中,可以采取不定期传送IDR图像的方式进一步提高H.264的抗误码和抗丢包性能。
(2)冗余图像:为提高H.264的解码器在发生数据丢失时的顽健性,可以采用传送冗余图像的方式。当基本图像丢失时,可以通过冗余图像重构原图像。
(3)数据划分:由于运动矢量和宏块类型等信息相对于其他信息具有更高的重要性,因而在H.264中引入了数据划分的概念,将片中语义彼此相关的语法元素放在同一个划分中。在H.264中有三类不同的数据划分,三类数据划分分开传送,若第二类或第三类划分的信息丢失,使用差错恢复工具仍然可以通过第一类划分中的信息对丢失信息进行适当恢复。
(4)多参考帧运动估值:多参考帧运动估值不但可以提高编码器的编码效率,还可以提高差错恢复能力。在H.323系统中,通过使用RTCP,当编码器得知有参考图像丢失时,可以选择解码器已经正确接收的图像作为参考图像。
(5)为阻止错误在空间上的蔓延,解码器端可以指定当P片或B片中的宏块在做帧内预测时不使用相邻的非帧内编码宏块作为参考。
网络适应性方面
为适应各种网络环境和应用场合,H.264定义了视频编码层(VCL)和网络提取层(NAL)。其中VCL功能是进行视频编解码,包括运动补偿预测,变换编码和熵编码等功能;NAL用于采用适当的格式对VCL视频数据进行封装打包。H.264编解码器的层结构如图2所示。
(1)NALUnits:视频数据封装在整数字节的NALU中,它的第一个字节标志该单元中数据的类型。H.264定义了两种封装格式。基于包交换的网络(如H.323系统)可以使用RTP封装格式封装NALU。而另外一些系统可能要求将NALU作为顺序比特流传送,为此H.264定义了一种比特流格式的传输机制,使用start_code_prefix将NALU封装起来,从而确定NAL边界。
(2)参数集:以往视频编解码标准中GOBGOP图像等头信息是至关重要的,包含这些信息的包的丢失常导致与这些信息相关的图像不能解码。为此H.264将这些很少变化并且对大量VCLNALU起作用的信息放在参数集中传送。参数集分为两种,即序列参数集和图像参数集。为适应多种网络环境,参数集可以带内传送,也可以采用带外方式传送。