网络封包遗失的信息修补艺术(二)
本文作者:admin
点击:
2007-09-11 00:00
前言:
为了使接收端的封包遗失不致影响服务质量,通常其会采用一些封包错误隐藏机制。一个简单而有效的错误隐藏策略,可参考Gallant及Kossentini所提议的方法。在许多现存之错误隐藏策略里面,其使用的是一种空间因果性(causal)方法。解码器只利用先前收到的封包所提供信息来隐藏(插补)遗失的封包,例如宏区块(MB)之移动向量(MV)的猜测,可由该区块周边3个MV来加以评估(即是左上、下及右上)。这种因果性的错误隐藏技术亦被广泛用在数字影像处理领域,例如:例如Bayer RGB 模版(Bayer RGB pattern)的色彩信息遗失,往往也都藉由该遗失像素之空间上周边像素色彩信息来加以补偿而得。
但除了空间的因果性错误隐藏方法之外,亦有另种“时序取代”之错误隐藏方式被提出(参见F. Zhai、Y. Zisenberg等人的研究),这种时序方式的错误隐藏方法乃利用前后画面之间的参考差异,作为遗失补偿的依据。在实时视频上面,单靠空间因果性的错误隐藏方法未必能达有效的补偿错误作用,通常与视频压缩效率问题一样,我们也可能必须往时序方向去考虑。一言以蔽之,对实时视频而言视频数据除具有空间关联性之外,时序方面的高度相似性往往也可能成为非常有潜力的错误隐藏方法。另外要注意的是,来源端的封包遗失机率与传送时的封包遗失机率,此两者之间的关连性乃依据所选用特异性传送封包化策略而定,两者并非全无关系存在。
一些错误回复技术
在一个基于因果性的错误控制策略里,要评估目前的遗失数据,乃必须依据之前的传送数据而定(即现在遗失数据的插补与之前接收的数据有因果关系)。假设系统尝试依据PSNR(peak signal-to-noise ratio)去维持一定程度的视频质量(简单的客观视频质量维持)。在一般情况下,为达此质量目的,我们所需要的参考数据也要有足够高的质量(在影像处理上,即需要一定大小的回旋核心存在)。因此为了修复现在遗失的数据,以维持质量不致降低,我们需要先前传送的数据本身拥有足够高的质量可供参考。不过,通常我们对于这一点往往无法确认其传送质量,也无法评估所遗失的信息对未来视频质量的影响程度会有多大。因此,这让此类错误控制方式变得没有效率。一个直觉式的取代方法,便是我们可以用量的方式取代质的要求。
换句话说,我们总是要传送高质量的数据出去(不管这些数据有没有在未来被使用到),一旦有发生传送的视频封包遗失的情形,那就有足够高的质量参考可供修复遗失信息。但这种作法的缺点,在于整体系统资源之浪费严重。这种基于因果错误隐藏方式的错误控制策略,明显和那些基于前导错误修正(forward error correction,FEC)的策略有着同样的问题。从另一角度来看,如果应用非因果性的错误隐藏方法,那其效果又如何?在此至少和因果错误隐藏方式有一个明显区别,那就是我们不须为了封包遗失的问题,预采某些先行措施来防备。此即是在传送过程中如果发生封包遗失,其在有必要之下才会改变数据的传送质量。为这种方式不需要预先传送大量可能不被使用到的高质量封包数据,因此不会加重系统负担,且在系统资源的使用上面会非常比较有效率。ARQ(Automatic Repeat reQuest)的运作也是基于此概念,他只会在目前传送数据有发生遗失的情况,才会在将来传送时把遗失的部分予以重传。
目前为此,这种依时重传策略目前也是大家公认还非常有效率的一种方法。只不过,对视频串流而言,非因果错误控制(NCEC)方式有时在能量的使用上,会比ARQ要更有效率(事实上在实时串流应用上,ARQ的使用并不广,因为它并未考虑到这些应用型态的延迟需求)。一个无线视频传送系统概要,如图1。
在图1中,一个视频撷取装置在撷取视频完毕之后,这些原始信息(raw data)会先被影像处理核心处理,然后再经过压缩后储存或是传送。为了方便网络传送,通常这些已被压缩后的视频位串流(video bitstream)会被存在一个通话区段(session)起始前的一个服务器中,并且在这些位串流被传送前。其会先经过封包化(packetized)处理过程然后才传送出去。当使用者端收到这些封包化信息之后,先会经过去封包化过程将这些封包组合起来,并可能具备通知服务器,其所遗失封包信息的功能。服务器便可依据这些信息回馈数据,以及相关未来视频数据速率失真(rate distortion)情形,作为其传送能量(能力)管理(power management)或是建构错误控制模块(error control module,EC module)的依据,以及决定其未来这封包所应具备的适当传送能力。封包传送策略的选择与传送能力之管理,主要目的之一乃在于维持一定之服务质量,而伺服端为达更精确的质量控制,往往需要接收端回馈一些封包接受的信息,或者需要在接收端建立一些缓冲区(buffer)以储存一些视频数据,用以提供未来视频的显示或译码之用。在一般视频串流得应用里面,利用接收端缓冲区来预存未来几秒视频数据的作法,是司空见惯的一种现象。为了简化说明起见,我们假设接收端的缓冲区大小为2个GOPs容量(即可存GOPi-1与GOPi数据)。
此意味着,在传送GOPi的情况下,我们只会关心GOPi-1的正确性。对一个有8个画面之GOP大小,其画速为每秒30格(30 fps)的视频而言,接收端(有两个GOP大小的buffers)所需要的缓冲区空间配置约为0.53秒的视频数据(此缓冲区大小可自由假设)。假设GOPi-1已经传送给接收端,而用以报告GOPi-1封包遗失的回馈封包负载区,乃由Mi-1个位所组成,其中有个位n为旗标位,主要用以表示所接受GOPi-1封包中的第n个封包。此值不是0便是1,0表示GOPi-1中的第n个封包并没被接收,接收端没有对此封包解码;如果为1,则表示该封包以被接收并可顺利译码。传送者可根据此旗标位之状态来得知某个封包的遗失情形,并采取适当的补救措施。这种回馈封包会在每个GOP传送时间顺序区隔(time slot)结束后,由接收端传回给伺服端作为下次质量改进或传送能量调整依据(例如:在无线传输情况)。因此传送者在下一波GOP开始传送之前,依据回馈模式的选择,可能在收到接收端的回馈信息之后,才会传送下一波GOP数据,但以可能在接收回馈信息之前已先传送所需的一些GOP封包出去。如图2。
当GOPi-1的封包全部传送完毕之后(参考图2),接收端会产生一个回馈信息(图中虚线部分)传送者(伺服端),在该回馈信息中将涵盖刚刚传送GOPi-1时,其封包遗失情况。依据系统设计差异,该回馈信息可以设定在下一个GOPi传出之前取得或是在传送下一波GOP之中取得。前者图2(A)设计之主要缺点,在于回馈信息会造成实时串流的迟延可能,且如果回馈信息亦遗失,那就会造成系统时间上的无谓等待。在图2(B)的方式里面,系统依据其既定排程将在GOPi-1传送完毕之后紧接着传送GOPi的封包,其不管接收端是否已经传送回馈信息。因此在此模式下,接收端的回馈信息到达传送者时,其已将GOPi的一些封包传送出去,多数系统以图2(B)为主要设计方式。为使封包遗失率降低,另一种方法可以尝试将封包负载大小缩小,如果在无线环境下,可增强其传送能量,如此将可大幅提升封包的到达率。有关一些封包遗失的错误控制方法,在此简述以下几种策略:
一、重传方式的错误控制方法
在此所谓重传式EC策略,主要以ARQ的精神作为其研发蓝图。在这种策略里面,但发现之前GOP之封包有遗失情况,则传送者会将遗失的封包与目前正在传送的GOP封包一起传送出去。剩下的频宽将被用来反复coding目前GOP封包或是重传封包。假设在GOPi-1的Mi-1个封包里,有X个出现遗失的情况。因此如果X=0,那就表示封包无遗失,也就没什么好讨论的,比较有趣的是在的情况。在此情况下(即是X={L1,L2,…,LX}),如果没有错误控制策略可供使用,那解码器(decoder)将只能译码GOPi-1中的(L1-1)Bp个位(其中Bp表示负载区位数)。现在如果L1被重传以及此封包也被接收端正确的接受,则解码器将可以进入GOPi-1的(L2-1)Bp位的译码进程。
同理,如果L2的封包被重传也被成功接受,则解码进程就会来到(L3-1)Bp位,以下类推。整体而言,如果令表示重传GOPi-1封包Lj的遗失机率,则对接收端之GOPi-1而言,其接收端的期待失真值(以来表示)为,因此如果封包Lj被重传了次,那它的有效遗失率(effective loss probability)就会降低到。我们除了尝试去找出GOPi-1封包适当的能量等级与需要重传的次数之外,对GOPi之封包我们也要为相同之处理。不过要如何找出适当的能量等级与需要重传的次数?作法之一便是先找到,其中j=1,2,…,X以及,其中m=1,2,…,Mi,若以表示为频宽膨胀因子(bandwidth expansion factor,BEF),使得最小化(其中Rt为传送速率),并使及限制在Dmax之内(不大于Dmax)。在此,所对应的是GOPi-1封包重传所需要的能量,而所对应的是GOPi封包重传所需要的能量。一旦让我们找到大概的能量等级以及相关的封包遗失率后,我们便可以找出最佳的重复次数,其中j=1,2,…,X与,其中m=1,2,…,Mi。则总传送能量为之计算为之最小化,且限制不大于,其中表示封包所使用的传送能量。根据我们所找到的与,我们就可决定新的封包传送能量等级。