概念
容错编码(error resilient coding)与信源编码端纯粹追求编码效率不同,容错编码是在编码过程中加入一部分冗余信息来增强抗误码能力,力求以最少量的冗余来获得最大的增益,其抗误码性能是以牺牲编码效率为代价的。
根据处理差错扩散的类型和方式的不同,容错编码技术主要有:插入同步标记(RM)、数据分割(DP)、可逆变长编码(RVLC)、参数集、帧内编码更新技术、分层编码(LC)技术、相关子数据流传输的多描述编码(MDC)等。1
工作原理插入同步标记在使用VLC时,一个比特的错误就可能导致解码器失去同步。为解决这个问题,一个简单有效的方法就是周期性地插入同步标志。同步标志区别于普通码字,解码器很容易将它们和普通码字区分开来。当解码器检测到同步标志后,就可以恢复正确解码。
显而易见,插入同步标志会降低编码效率。同步标志长度越长,使用越频繁,开销也越大。但对解码器来说,频繁使用同步标志有利于解码器快速恢复同步,减小误码影响范围。
数据分割在压缩后的视频码流中,每个宏块的头信息和变换系数的编码是排列在一起的。在发生差错的情况下,两部分信息会同时丢失。而实际上,头信息远比变化系数重要;头信息(图像格式和量化步长)影响整片、整帧甚至整个视频序列,而变换系数仅仅影响部分图像区域或者个别采样值。因此,数据分割技术利用视频码流中各语法元素的重要性不同的特点,在丢包网络中传输时对不同部分的数据区别对待,以保护更重要的数据,提高图像解码质量。当解码器发现误码时,仅丢弃不可解码的逻辑单元,对其他逻辑单元照常解码。
数据分割的好处在于:容易确定误码位置及其性质,从而采取合适的掩盖技术或其他对策,便于分级保护数据,加强重要数据的传输保护。但在一定程度上也降低了运动预测的精度和范围,降低了编码效率。
可逆变长编码除了插入同步标志方法外,改进VLC编码方法同样可以达到减少误码影响范围的目的,如可逆变长编码。可逆变长编码是一系列特殊的VLC编码,具有一些特定的前/后缀特性,使其在正向和逆向均能得到唯一的解码。当差错发生后,解码器可分别由两个重同步点开始进行前向和逆向解码,从而更精确地确定差错发生的位置并恢复部分数据。
常规的VLC只能进行前向解码,而可逆变长编码则具备逆向解码的特性,在恢复丢失的数据的时候,这一特性十分有用。例如:在使用VLC时,当检测到比特流中的错误,解码器往往会跳到下一个同步标记;如果使用可逆变长编码,解码器并不会丢失从错误位到下一个再同步标记之间的数据,而是从下一同步标志开始逆向解码,直到下一个已被确定的错误处,这样就可以恢复部分数据,而不是全部丢弃,从而更多地利用正确码流。
参数集一些重要信息的丢失,如序列和图像的头信息,会造成解码的严重错误。在H.264中将这些关键信息分离出来,凭借参数集的设计,确保在易出错的传输环境中能正确传输它们。具体说来,这样的码流结构在头信息中只携带参数集的标号,而参数集可以通过以下方式来传输或处理:(1)带外传输参数集,通过可靠的协议,在首个片到达之前传输到解码器;(2)带外传输,采用发送复制分组来保证至少有一个拷贝到达解码端;(3)在编码器和解码器中采用硬件来处理。多个不同的序列和图像参数集贮存在解码器中,解码器通过每个单元标识的参数集ID来选择合适的参数集。
帧内编码更新周期性插入帧内编码帧/块是阻止误码在时域扩散的一种方法。通常,I帧的编码长度远大于P帧和B帧,插入I帧会导致输出码率的显著起伏波动。帧内编码更新不依赖时域的预测信息,能有效地阻止视频差错在时域的误差累积。但相对于帧间编码,帧内编码的复杂性显著增加。如果采用整帧更新,将导致编码码率急增或由于信道带宽的局限而导致延迟过大,在实时应用中较难应用。因此,通常会对一帧中的部分块进行帧内更新。但过多的帧内更新MB也会增大比特流,因此在比特率受限的条件下,如何确定帧内MB的位置和数量是问题的关键。
分层编码分层编码是指将视频信号编码成一个基本层和多个增强层。其中,基本层包含视频信号的基本信息,提供最低限度的质量保证;增强层包含视频信号的细节信息,以基本层作为预测基础,进一步提高视频质量。解码器能根据不同的带宽条件或解码能力选择不同质量的视频。
分层解码具有一定的抗误码性能,因为编码后的码流中仍然存在着一定的冗余信息。这是因为:一是为了避免误码扩散,增强层的Key picture往往采用帧内编码的方式进行编码;二是每层都需要相同的附加信息。2