音视频实时传输错误掩盖算法

音视频实时传输错误掩盖算法

 

受信道自身条件的制约或突发状况影响,视频码流的传输过程中会产生误码。误码类型主要为比特错误和传输丢包。当误码数量超出了信道和解码器的内容技术支持范围,就会造成视频解码错误,视频质量下降。此外,在视频实时传输中,端到端的时延和“抖动”也会影响视频质量。其中比特误码主要是由于物理信道自身的缺陷和信道噪声造成。比特误码包括比特翻转、比特插入和比特删除;丢包错误主要是由于传输网络的堵塞或其他不良信道传输环境导致;时延过大会产生画面停滞,声音超前等状况。严重影响视频观看质量。“抖动”是由于传输过程每帧时延不同而造成的解码端接收码流不连续。虽然可以通过增加解码端缓存来缓解“抖动”现象,但时延超出解码端缓存的存储能力后,视频的播放快慢不均。

 

1 错误掩盖的定义

错误掩盖技术是基于解码端的一种差错控制技术,它的基本原理是采用一定的算法将信道传输过程中产生的误码对于视觉效果的影响减小到最低程度。在解码过程中,错误掩盖技术的流程主要分为两大部分,第一部分主要对解码后码流中的误码进行检测和定位,为后续的实质性错误掩盖工作做准备,这是一个准备性质的阶段;第二部分是错误掩盖方法的具体实施,他的具体算法流程主要是针对区域中已定位丢失和错误宏块进行重建和修复处理,最后输出图像。

2 掩盖技术

1)空余错误掩盖技术 :帧内错误掩盖,参考帧内与错误块相邻的正确解码图像信息对误码图像空间范围进行空间内插,利用视频图像在空间上存在的相关性重构错误块的图像数据。

2)频域错误掩盖技术:利用相邻图像块频域变换系数的相关性预测错误块的部分频域系数,实现对错误块一定程度的重建。

3)时域错误掩盖技术:在解码遇到错误时,通过运动估计的方法恢复错误块的运动矢量,这种方法利用视频序列时域相邻帧之间的强相关性,在相邻帧中寻找匹配的图像块代替错误码块,掩盖错误内容。

4)混合域错误掩盖技术:同时采用空域、频域和时域方法之中的两种或两种以上的方法混合掩盖图像信息中的丢失或者错误块。

3 视频通信容错算法

目前视频编码压缩标准主要有MPEG-xH.26x两大系列,这些压缩算法都是基于宏块的,分别从三个方面改善编码效率:

1)运动估计/运动补偿(MP/MC)消除视频时间冗余;

2)图像差值的离散余弦变换(DCT)消除空间冗余;

3)量化系数的可变长编码(VLC)消除统计冗余。

实践表明,通过上述方法,视频编码标准获得了极高的压缩效率。但压缩后的码流在Internet,特别是无线信道上的传输仍然存在着一些棘手的问题,其中比较突出的一点是:一方面,这些压缩后的码流对信道比特误码非常敏感;而另一方面,无线信道由于多径反射和衰落引入了大量的随机误码和突发误码,影响了码流的正常传输。尤其是当采用了VLC方案后,码流更加容易受到误码的影响,结果在解码端将失去与编码端的同步,导致在遇到下一个同步码字之前无法对VLC 码字进行正确的解码;同时预测编码技术会将错误扩散到整个视频序列中,极大地降低重建图像的质量。因此,为了实现良好质量的视频传输,必须结合实际应用信道的传输特性,采取一定的容错措施。

根据在视频传输系统中位置的不同,容错算法主要可分为基于编码器的容错算法,基于解码器的容错算法和基于反馈信道的容错算法。其中:

1)基于编码器的容错算法,通过再编码比特流中添加冗余信息,这些冗余信息被添加在信源或信道编码器中,降低了编码的效率,增加了实现的复杂度,以换取编码的容错性能,大致包括:分层编码、多描述编码、独立分段编码、再同步编码和前向纠错编码(FEC)等。

2)基于解码器的容错算法,是指利用被损坏的宏块与其相邻的宏块之间的相关性来完成恢复工作的,这部分工作包括错误检测和错误恢复。对于错误的检测,一般采用针对语法的检错和嵌入数据的检错;对于错误恢复,可采用时域和空域的错误隐藏方法。

3)基于反馈信道的容错算法,指利用解码器获得误码信息,并通过反馈信道,传送给编码器进行误码处理的一种方式。主要包括:误码跟踪,有条件的ARQ,帧内/帧间编码模式选择和参考图像选择模式等。

4 H.264视频编码层的错误恢复

H264利用视频编码层(VCL)和网络提取层(NAL)双层结构将视频编码独立于网络,这种做法能够将视频编码数据通过不同的封装格式匹配到不同的网络和多元环境中。以下技术用以增强H264的容错能力。

1)参数集

H264的参数集包括图像参数集和序列参数集,序列参数集包括一个图像序列的所有信息,每个序列参数集对应的一个图像序列,图像序列以IDR图像七点或者终点。图像参数集包括一个图像的所有分片的全部相关信息,包括图像类型。序列号等,解码时,序列号是否连续可作为判断数据包是否被成功传输,接收的依据。由于序列参数集和图形参数集可能为多个NALU的共用单元,因此其重要性和优先级应高于一般的码流数据。分层结构能够允许人为加强对参数集的保护措施,包括使用单独的信号。可靠的协议,不等差错保护措施(UEP),重传等方式,保障参数集的有效性。

参数集具体实现的方法也是多样化的:

1)通过带外传输,这种方式要求参数集通过可靠的协议,在首个片编码到达之前传输到解码器;

2)通过带内传输,这需要为参数集提供更高级别的保护,例如发送复制包来保证至少有一个到达目标;

3)在编码器和解码器采用硬件处理参数集。

2)灵活宏块排序FMO

H264的编解码均以片为独立单位,同一片组的不同片的宏块之间不能用作彼此的预测参考,这种规定能够有效地遏制误码扩散。但是也同样增加了解码的难度。灵活宏块排序按照宏块分配映射表把相邻宏块分配到不按扫描顺序不同片中,同一图像的片可能不再属于同一片组,在这种模式下,某个丢失块就能够顺利用其周围不同片组的其他宏块解码,达到隐藏错误的效果。此外灵活宏块排序允许将图像划分为多种模式,通过对一帧图像中的宏块顺序分割,使每个NALU小于无线网络MTU的尺寸,便于视频数据在无线网路中的传输。

3)数据分割

数据分割机制使得一个片的码流信息不再以宏为单位排列组合。A片分割存放一个片内所有宏块的头信息,包括宏块的类型,运动矢量等重要信息。B片分割是帧内信息划分,以及帧内和SI片宏块的编码残差数据,帧内信息可以阻止错误传播,因此比帧间分割更为重要;C片分割为帧间信息。编码器把不同类型的分割存放在不同的缓存中,解码时,当帧内或者帧间信息丢失,有效的帧头信息仍能用来对丢失信息进行重构。

H.264视频编码标准使用了三种不同类型的数据分割。

1A型分割

A型分割是头信息划分,包括宏块类型、量化参数和运动矢量,这个信息是最重要的。

2B型分割

B型分割是帧内信息划分,包括帧内CBPs和帧内系数。帧内信息可以阻止错误的传播,该型数据分割要求给定分片的A型分割有效,相对于帧间信息,帧内信息能更好地阻止漂移效应,因此它比帧间分割更为重要。

3C型分割

C型分割是帧间信息划分,包括帧间CBPs和帧间系数,一般情况下它是编码分片的最大分区。帧间分割是最不重要的,它的使用要求A型分割有效。

4)冗余片(RS

冗余片是指编码端将同一宏块的一个或者多个冗余表示放入同一个码流中。冗余片通常采用不同的编码参数编码同一图像内容,每个冗余片都可以独立解码,解码质量和编码参数设置有关,一般互不相同。只有在主冗余片在传输过程中丢失或者解码失效时才会使用次冗余片。

 

5SP/SI

SPSI帧分别指特殊的P帧和I帧,SP帧能够参照不同的参考帧重构出相同的图像帧。

 

6AnnexBRTP码流的容错技术

 

7帧内编码

H.264中帧内编码大体上类似于以往的视频编码标准,但也进行了重要的改进,主要体现在:

1H.264中帧内预测宏块的参考宏块可以是帧间编码宏块,帧内预测宏块并不像H.263中的帧内编码一样,而采用预测的帧内编码比非预测的帧内编码有更好的编码效率,但降低了帧内编码的重同步性能,可以通过设置限制帧内预测标记来恢复这一性能。

2)只包含帧内宏块的片有两种,一种是帧内片(I Slice),一种是立即刷新片(IDR Slice)。立即刷新片需存在于立即刷新图像(IDR Picture)中。与短期参考图像相比,立即刷新图像有更强壮的重同步性能。

5 H.264网络提取层的错误恢复

NAL支持众多基于包的有线/无线通信网络,诸如H.320MPEG-2RTP/IP等。但目前,绝大部分的视频应用所采用的网络协议层次是RTP/UDP/IP,因此在下面的描述中主要基于这个传输框架。下面首先分析NAL层的基本处理单元NALU以及它的网络封装、分割和合并的方法。

1 NAL单元

每个NAL单元是一个一定语法元素的可变长字节字符串,包括包含一个字节的头信息(用来表示数据类型),以及若干整数字节的负荷数据。一个NAL单元可以携带一个编码片、A/B/C型数据分割或一个序列或图像参数集。NAL单元按RTP序列号按序传送。其中,T为负荷数据类型,占5bitR为重要性指示位,占2bit;最后的F为禁止位,占1bit

具体如下:

1NALU类型位

可以表示NALU32种不同类型特征,类型112H.264定义的,类型2431是用于H.264以外的,

RTP负荷规范使用这其中的一些值来定义包聚合和分裂,其他值为H.264保留。

2)重要性指示位

用于在重构过程中标记一个NAL单元的重要性,值越大,越重要。值为0表示这个NAL单元没有用于预测,因此可被解码器抛弃而不会有错误扩散;值高于0表示此NAL单元要用于无漂移重构,且值越高,对此NAL单元丢失的影响越大。

3)禁止位

编码中默认值为0,当网络识别此单元中存在比特错误时,可将其设为1,以便接收方丢掉该单元,主要用于适应不同种类的网络环境(比如有线无线相结合的环境)。例如对于从无线到有线的网关,一边是无线的非IP环境,一边是有线网络的无比特错误的环境。假设一个NAL单元到达无线那边时,校验和检测失败,网关可以选择从NAL流中去掉这个NAL单元,也可以把已知被破坏的NAL单元前传给接收端。在这种情况下,智能的解码器将尝试重构这个NAL单元(已知它可能包含比特错误)。而非智能的解码器将简单地抛弃这个NAL单元。NAL单元结构规定了用于面向分组或用于流的传输子系统的通用格式。在H.320MPEG-2系统中,NAL单元的流应该在NAL单元边界内,每个NAL单元前加一个3字节的起始前缀码。在分组传输系统中,NAL单元由系统的传输规程确定帧界,因此不需要上述的起始前缀码。一组NAL单元被称为一个接入单元,定界后加上定时信息(SEI),形成基本编码图像。该基本编码图像(PCP)由一组已编码的NAL单元组成,其后是冗余编码图像(RCP),它是PCP同一视频图像的冗余表示,用于解码中PCP丢失情况下恢复信息。如果该编码视频图像是编码视频序列的最后一幅图像,应出现序列NAL单元的end,表示该序列结束。一个图像序列只有一个序列参数组,并被独立解码。如果该编码图像是整个NAL单元流的最后一幅图像,则应出现流的end

H.264采用上述严格的接入单元,不仅使H.264可自适应于多种网络,而且进一步提高其抗误码能力。序列号的设置可发现丢的是哪一个VCL单元,冗余编码图像使得即使基本编码图像丢失,仍可得到较粗糙的图像。

2H.264中的RTP

上面阐述了NAL单元的结构和实现,这里要详细讨论RTP的载荷规范和抗误码性能。RTP可通过发送冗余

信息来减少接收端的丢包率,会增加时延,与冗余片不同的是它增加的冗余信息是个别重点信息的备份,适合

于非平等保护机制。相应的多媒体传输规范有:

1)分组复制多次重发,发送端对最重要的比特信息分组进行复制重发,使得保证接收端能至少正确接收到一次,同时接收端要丢弃已经正确接收的分组的多余备份。
2)基于分组的前向纠错,对被保护的分组进行异或运算,将运算结果作为冗余信息发送到接收方。由于时延,不用于对话型应用,可用于流媒体。
3)音频冗余编码,可保护包括视频在内的任何数据流。每个分组由头标、载荷以及前一分组的载荷组成,H.264中可与数据分割一起使用。

RTP的封装规范总结如下:

1)额外开销要少,使MTU尺寸在10064千字节范围都可以;

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的分割和合并。

1NALU的分割

虽然IP层的分割可以使数据块小于64千字节,但无法在应用层实现保护,从而降低了非平等保护方案的效果。由于UDP数据包小于64千字节,而且一个片的长度对某些应用场合来说太小,所以应用层打包是RTP打包方案的一部分。目前的拆分方案正在IETF的讨论之中,大致具有以下特点:①NALU的分块以按RTP次序号升序传输;能够标记第一个和最后一个NALU分块;可以检测丢失的分块。

2NALU的合并

一些NALUSEI、参数集等非常小,将它们合并在一起有利于减少头标开销。现有的两种集合分组:单一时间集合分组(STAP),按时间戳进行组合,一般用于低时延环境;多时间集合分组(MTAP),不同时间戳也可以组合,一般用于高时延环境,比如流应用。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值