网络封包遗失的信息修补艺术(一)

本文作者:admin       点击: 2007-08-13 00:00
前言:
大数法则支配人类许多研究领域,在信息错误回复的研究领域里亦同。只不过此在以往尚可应付有线环境的原则,这几年因为网络环境生态的微妙变化(从有线到无线,从纯文字到多媒体,从桌上计算机到口袋计算机),已慢慢出现捉襟见肘的现象。封包遗失乃IP网络常态,而错误回复的方法亦随着时代演进而有所不同。未来取大数法则而代之的,将是更精致化、更有效率、更省系统资源以及更低的运算复杂度的错误回复方法。

封包遗失与其影响

“网络错误”的发生是IP网络的一种常态,即使现在因网络设备的更新与算法的精进,使得封包错误率已降低许多,但在许多情况(尤其是网络拥塞情况)下,封包的遗失仍在所难免。既然封包遗失在所难免,那封包遗失的严重性自然便不可概括而论。此必须依据其应用型态种类之不同,而存有不同程度的影响力。但大致说来,越接近实时应用(real-time applications)型态,其所能容忍的封包遗失率就越低。举例来说,这些实时应用大家耳熟能详者莫过于IP网络电话、IP视频会议、网络视频/语音串流服务…等等。一旦发生网络封包的遗失,要如何对遗失的信息进行补偿是一种错误回复艺术,此艺术依据分类标的之不同,而可分成因果性回复机制与非因果性回复机制;或因作用端使用的差异而分成来源端的错误回复机制、通道的错误回复机制与接收端之错误回复机制…等等分类。前者所谓因果性回复机制,顾名思义,乃在于其遗失信息的补偿部分乃必须依据接收端所接收到之前的信息来加以猜测决定(或信息插补),也就是说,其补偿与之前所接收的信息之间有着因果关系存在。
以一般的视频系统(video system)而言,其普遍在接收端存有庞大的缓冲区区块,以处理视频跳格(jitter)问题。故此缓冲区的资料刚好可以提供我们来实作因果性(causal)错误修补算法,以插补所遗失的封包信息。另外一种乃非基于信息因果性关系所为之修补方法,我们一般称为非因果性的处理法(noncausal processing,NCP)。因果性处理法与非因果性的处理各有优、缺点,大多数实作乃以因果性方法为主,但其缺点是需要耗费大量系统资源;因此在某些应用领域有学者研究以NCP实作的可能性(例如:无线网络装置)。其实NCP早就曾被用在音讯串流(audio streaming)的隐藏性的封包遗失问题的处理上,但当时只有很少的尝试将此方法用在视频串流的错误隐藏处理上。这里面一个非常有名的时序错误隐藏策略,就是移动补偿(motion-compensation)的时序置换(temporal replacement)。其中一个遗失的宏区块(marcoblock,MB)会被之前画面的邻近MBs所评估后之局部移动(local motion)MB所取代。目前这种利用之前画面MB来作为遗失MB重建依据的方法,已有多种变异版本被提出讨论(可参见. Zang或是S. Tsekeridou等人的研究)。目前利用非因果处理(NCP)作为错误隐藏的处理方法的学者,主要有J. G. Apostolopoulos及Y. C. Lee等人。
在Apostolopoulos的研究里面,受损画面之修复乃依据先前画面与未来所接收画面之相关部分信息所为(非只是依据过去画面决定)。对于多画面错误之隐藏方法,则可参考Lee等人的提议,在修复遗失的MB时,并合计算在未来视频中的目前画面之错误隐藏。不过错误隐藏之方法有很多种,非因果性错误隐藏方法(noncausal error concealment,NCEC)未必一定比基于因果性错误隐藏方法(causal error concealment,CEC)的等价策略要好。只不过非因果之错误隐藏方法,因可以更有效利用系统资源(system resources),而成为许多人在研究无线装置或无线网络环境时的一个重要研究对象。另一种依据机制使用的场所不同而分成来源端、通道与接收端的错误回复机制。在以往许多情况下,许多讨论往往仅及于来源端与接收端的讨论,而将通道错误部分予以忽略。但事实上,此情况在有线网络环境下是还比较没问题的,如果是在无线网络环境,那信道的错误部分便不能被假设性的忽略。因为我们目前使用的通道是一种有损性封包通道(lossy packet channel),任何来源端的编码(source encoding)都应该去适应通道错误的情形(因为信道噪声是很常见的一种现象)。
对无线视频而言,其错误回复(error resilience)通常由重新同步校准(resynchronization making)、数据分割(data partition)与可逆转之可变长度编码(reversible variable-length coding,RVLC)所组成。若是对有线模式(例如:有线Internet环境)视频而言,错误的回复通常会被转换成每个封包最佳化编码模式的选择(optimal encoding mode selection),此乃因为不同预测模式(prediction modes)会导致不同的编码效能与影响其强固性。因此如果只依靠来源端的适应性编码策略,并无法应付大量不同封包遗失的情况,并且也会造成对频宽瓶颈的评估有失准确。所以除了来源端的适应性编码策略外,往往还会需要配合重传或是前导错误修正(FEC)机制的使用,来做为未来封包遗失的对策才足以适用。

封包传送之速率失真问题

因为现行的TCP/IP网络采用的是一种“尽力做好”的服务机制,所以其并不保证服务的质量得以维护。职是之故,要在Internet上面传送实时视频数据,大多需要二种机制的配合,一种是“拥塞控制(congestion control)机制”,另一种则是“错误控制(error control)机制”。前者涵盖了速率控制(rate control)、速率适应性编码(rate-adaptive encoding)以及流速塑型(rate shaping)。而后者(错误控制机制部分)则包含了错误回复(error resilience)、重传(retransmission)以及错误隐藏(error concealment)。

以目前常见的错误控制方法来说,其有三个主要成员,分别是:错误回复(error resilience)、前导修正(forward error correction,FEC)以及错误隐藏(error concealment)。由此可见,“拥塞控制”是避免封包遗失的一道重要关卡,对一个大量拥塞的网络而言,为避免封包的继续涌进,路由器常会将进入该网域之封包主动丢弃造成大量封包遗失。因此,针对封包的流量控制常扮演着降低错误发生与维持一定服务质量的关键要角,并常以封包的速率失真率,来作为评估依据。因此研究速率失真(Rate-distortion,R-D)的最佳化,主要是要用来决定每个封包的编码模式(encoding mode)以及信道编码速率(channel coding rates)。在对付封包遗失的问题上面,传统作法是以重传的方式为主。在传统的重传策略里,其主要为自动重复要求(ARQ)方法。但此方法对于实时视频媒体应用而言,有其捉襟见肘之处。

另外一种错误隐藏方式,则被视为一种译码器端的后处理(post-processing)技术,有关其更详细的讨论,可参见D.Wu、Y.T. Hon及Y.Q. Zhang于2000年所提出关于网络上传送实时视频上的一些争议问题之研究。一般为了方便讨论,一个典型的速率失真(rate-distortion,R-D)最佳化问题,通常只考虑来源端的最佳化模式选择而已,即是在某个速率限制下,最小化每个编码模式封包的量化失真,其形式如式(1)。

 ,并限制  式(1)

其中Ek表示第k个封包所具有的某种特殊编码模式,而Qd,k与Rs,k分别表示第k个封包的量化失真(quantization distortion)及来源端(source)的位速率(bit rate)。而D与R0表示某一个画面(frame)全部之量化失真及位需求限制(或称为“位预算(bit budget)”),而M表示一个画面中的封包数,通常R0的取得必须藉由高阶的速率控制器(rate controller)为之。为何要谈最佳化?因为其目的希望在给定一定速率限制下,能达到最小化期望失真值的统计目的。在不同的视频编码策略里,其最佳化的方式也略有区分,例如:在可变视频(scalable video)编码策略里,其最佳化必须要分层考虑基层(base layer,BL)与强化层(enhancement layer,EL)的问题,基于同样概念其可如式(2)A、B表示。



且(基层)              式(2)A



且(强化层)            式(2)B

其中RB,s,k与RE,s,k为第k个封包的基层与强化层来源端速率(source rates),RB,c及RE,c即为基层与强化层之信道速率(channel rates),而RB,0与RE,0(其中R0=RB,0+RE,0)则表示位速率之限制,而底线字母B、E分别表示基层与强化层。
在具错误倾向(error prone)之通道里(即是有损通道),为达到好的效能,除了考虑来源端的行为之外,往往我们也必须考虑路径特征(例如:信道编码要求)与接收端的行为特征。为了做到这一点,我们常考虑一个点对点的最佳化最小失真模式来取代原先的单向考虑来源端的最佳化模式(也就是摒弃仅由量化错误来取得失真可能性的计算方式),其形式如式(3)。

 ,

并限制                        式(3)

式(3)中的E[D]表示失真期待值运算,其被用来考虑接收端的封包遗失及错误隐藏,而Rc,k则表示第k个封包的信道速率(channel rate),其单位为每信道位之位数(bits per channel bit);Rs,k表示来源端速率(source rate),其单位为每秒几位(bits per second,bps)。如果来源端有更多可利用的位可被配置,则编码效率虽然可以提升但却导致位串流(bitstream)可能会走样(错误抗性降低),在此信道编码(channel coding)在此便扮演着来源端编码效能与位串流错误抗性之间的一个重要衡平角色。
在信道编码上,许多人使用的是Reed-Soloman编码(RS code)的方法。RS code为一种系统性编码(systematic code)方法,一般而言,RS code对封包的保护能力乃依据其区块大小(block size)与编码速率(code rate)而定。一个RS编码的表示型态主要以RS(n,k)为主,其中k表示来源端的字符长度,而n-k为相类之字符长度。因此如果字符的位置已知的话,消去已知字符的位置便剩下相类字符位置。不管那个字符遗失,其RS(n,k)的编码速率均为。除了Reed-Soloman码之外,其它的保护码还有Tornado码。Tornado码虽然保护的效果比RS码要差一点,但其在编/解方面的效率却比RS码要好很多。而在此所谓的封包遗失的情形,可分成使用错误回复(error recovery)方法前或是使用错误回复方法后的封包遗失情形。一般我们在称接收端的封包遗失,往往指的是在“使用错误回复方法后”,遗失的封包仍无法藉由接收区块(block)来加以回复之情形。为了解其量化情形,我们可令使用错误回复方法后的封包遗失率为,则其定义如式(4)。

       式(4)

其中表示为使用错误回复方法前之封包遗失率。另外在2006年的时候,F. Zhai及Y. Eisenberg等人发展出联合编码方法(Joint Source-Channel coding,JSCC),JSCC的主要目的,在于利用于来源端及通道中加入的冗余位(redundant bits),来取得错误抗性(error robustness)与压缩效能之间的平衡点。JSCC的运作原理主要放在来源端及信道编码之间的位配置(bit allocation)上面,例如:T. Stockhammer及C. Buchner等人的研究。来源编码(source coding)的完成,主要是基于来源与信道之间的位配置完成后,其所能得到之位预算而定。而来源编码的最佳化,可以藉由信道编码之后所剩余的残余错误计算,以模式选择(mode selection)的方式来达成。如果我们另以μ、υ来分别表示一个画面中之来源编码参数及信道编码参数之向量,则循序性的JSCC步骤有以下两个阶段:

第一阶段:,

并限制 

第二阶段:,

并限制 

其中E[D]表示失真期望值,而Rt则表示传送速率,Bs及Bc分别表示来源端位(source bits)与信道位(channel bits),而T则代表相关的传送迟延(transmission delay),若Tn则表示第n个画面之传送迟延,T0与Ts,0则分别表示整个画面以及来源端位的传送迟延限制(transmission delay constraint)。对第一阶段而言,其第n个画面的总传送迟延为Tn,而在第二阶段里面,其限制主要为来源端传送迟延(Tsn)部分。为了解决第一阶段的问题,有一些信道编码技术可供使用,对一些预编码视频(pre-encoded video)而言,因其来源端的编码是固定的,因此对于通道的失真及第二阶段的研究部分,在客观上便失其必要性。要特征化第一阶段的方法之一,便是使用来源端的R-D模式。但对一个区块式移动补偿(block-based notion compensation)视频编码而言,JSCC存有许多争议,主要导因在于这些相关重要的封包并没有一个明确的可被利用性存在(我们并不知道哪些封包是相互关连且重要的)。
另外Stockhammer及Buchner也提议了一种称为IJSCC的方法,其以联合来源端编码与信道编码的最佳化错误回复方式,取得更高错误抗性。其与传统JSCC方法的不同处,在于IJSCC利用来源端与信道编码的最佳化计算优势,作为失真期望值的计算方式并藉以研究来源端编码与信道编码之间的互动关系。有关IJSCC的相关研究可以参考M. Gallant及F. Kossentini所发表关于R-D层级编码(layered coding)的研究(2001),在此就不多做冗述。

视频编码与封包化

经由IP网络来传递实时视频,因封包遗失为其常态,故应用层(application-layer)的错误控制方法常经由联合来源端与信道编码方法(joint source-channel coding,JSCC)来加以搭配使用。其中来源端编码(source coding)与前导错误修正(forward error correction,FEC)更是常被加入错误控制之设计里面,用以缓和因封包遗失所带来的冲击。不过要在IP网络上保证实时视频质量有其一定之难度,在处理这些视频QoS的问题上面,一个通常的作法是应用错误控制策略来因应。不同的错误控制策略,其使用的方法(组件)亦可能在不同的网络层级上加以实作,并且可能被放在传送端或接收端来处理。在传送端,其可能应用的有错误修复(error resilience)来源编码策略、应用层重传机制或是混合式的FEC方法;在接收端,其可能应用的策略主要有错误隐藏(error concealment)方法。不管是在接收端或传送端,每一种不同的错误控制方法都被用来处理封包遗失的问题。例如:在错误回复来源端编码策略里面,其执行错误控制的方法,是利用在来源端编码层级里面加入一些冗余封包来防止错误之扩散,并限制封包遗失所可能导致的失真情形。
在封包交换式的网络里面,要做到错误回复一般有两种常见技术可供使用。一种是利用封包本身的不同编码机制来做到错误回复的功能,另一种是利用现有的错误修正方法来达成错误回复功能。在前者,其其错误回复的效能与每个封包的编码模式(encode node)选择息息相关,例如使用可变视频编码或多描述编码(multiple description coding)方式,也可以达到一部份错误回复之效果;除了封包本身的编码模式选择来达到错误回复功能之外,另一种处理封包遗失的方法,便是在应用层传送层使用错误修正技术(error correction)。目前这种错误修正技术有两种常见基本型态存在,一种是前导错误修正(forward error correction,FEC)方法;另一种是自动重复要求(automatic repeat request,ARQ)方法。两种方法在其错误强固性与网络流量负载(traffic load)上均有其优、缺点。
在许多观念里,因为这种错误回复机制常被放在译码端使用,所以错误回复技术也就常被认为是一种须藉助译码器所使用的后处理技术,其利用视频片段在空间与时序上之关联性,用以掌握封包的遗失状况。不过在实时串流的应用上面,ARQ比FEC较少被使用,换言之FEC-based的技术在此领域颇受青睐。甚至J. Rosenberg及H. Schulzrinne更是强力主导FEC方法成为IETF错误回复之标准规范。然而因FEC本身区块大小(block size)之限制,其不能完全避开封包遗失的问题。另外,FEC的使用即使在无封包遗失的情况下,亦须付出固定的使用代价,且FEC的适当使用层级必须依据通道行为的精准评估才行。此点相较于ARQ,FEC方法的确有不及之处(因ARQ可以自动适应信道的遗失特征,并只传送所遗失的封包及数量),因此在端点对端点的延迟限制无太大要求时,ARQ的方法反而会是不错的选择。一个封包式实时视频传送系统,以及不同层级所可以使用的错误控制组件如图1。
视频的编码对于频宽的节省有重大贡献,但是其必须倚靠译码器的高度复杂性运作。以一个输入的视频来说,其对移动评估(motion estimation,ME)算法而言是一种主观性的资料,其必须经过一些处理之后,输出移动向量(motion vectors,MV)及移动补偿(motion compensation,MC)的时序(temporal)分析才能提供客观质量建立之实质帮助。如果站在信号处理的角度来看,移动补偿的时序分析区块之输出,可视为一种时序上低频与高频次频带(subband)之集合。以一个由8画面组成之GOP结构以及画面之移动向量关系而言,如图2。
图2中,我们显示了一个由8画面组成之GOP结构以及画面之移动向量关系。图示中最上层所表示的是一全画速的视频画面,其邻近之画面(frames)被分解后产生高频与低频频带(前者以虚线表示,后者以实线表示),而图中的箭头部分为移动向量(MV)。由图二可以看见,在经分解邻近画面后所产生的频带,其中时序低频对于移动向量得取得是很有帮助的。通常他们的发生速率为视频画速的一半而已,且此过程会不断重复,直到我们取得GOP内8个画面之移动向量为止。在上述例子里面,整个视频数据有四个时序延伸层(temporal scalability levels),即是图二中标示的(1)~(4)。这些不同层级对视频重建有不同之贡献,举例来说,视频画速只有全画速之1/8时,那只需第一层视频数据(level (1))即可重建视频。相对的如果画速达全画速之1/4,那视频的重建就会需要第一层及第二层协力完成。同理,如果视频画速达到全画速1/2,那所需要的视频数据就要更多(即是需第一层、第二层及第三层时序数据)才能重建视频。
对于已压缩的视频位串流而言,可以依据GOP-based的方式加以封包化。而对一个给定GOP的位串流而言,其在封包化之前首先会先被重新排列,使得GOP的移动向量可以被排放在位串流得起始之处,紧接在移动向量之后者,乃已编码的次频带样本(subband samples)。经过适当排列之后的位串流,接下来才会被封包化成512-byte左右大小的切割封包。此切割封包中除了含有GOP样本之外,还涵盖了4-byte的应用层标头(application-layer header),用以表示GOP号码与GOP内封包序号。在标题后面的负载区(payload)则被用以存放已压缩的视频数据,其可存放之空间为508 bytes。换句话说,视频之频宽实际可负载率约为99.22%左右(即508/512*100%)。在GOP的运算里面,其传送能力等级(即是power level)之决定乃在于其速率失真(rate-distortion)特征。
因为在IP通信的过程中封包遗失的情形无法完全避免,对实时串流而言,封包的遗失影响程度不一,而对这些封包遗失的修补作法一般有两种常见的技术可供使用,一种为重新传送技术(retransmission),另一种为错误回复(error concealment)技术,这些技术我们稍后再做说明。