網路封包遺失的資訊修補藝術(一)
本文作者:admin
點擊:
2007-09-06 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)
其中 表示第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,而在第二階段裡面,其限制主要為來源端傳送遲延( )部分。為了解決第一階段的問題,有一些通道編碼技術可供使用,對一些預編碼視訊(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),在此就不多做冗述。
註:本文有多處因作者以公式表示,無法在網頁環境中顯示,敬請讀者見諒.如欲閱讀完整全文,請參閱本刊八月號100期印刷本.