一、前言 在過去的20年里,Internet、移動通信和多媒體通信獲得了前所未有的發展,并獲得了巨大的商業成功。移動通信和多媒體技術的融合正在加速進行,諸如網絡架構、低功耗的集成電路、功能強大的數字信號處理芯片、高效的壓縮算法等方面的研究成果不斷涌現。面向無線網絡和因特網的視頻圖像編碼與傳輸技術已成為當今信息科學與技術的前沿課題。 2003年,ISO/IEC的運動圖像專家組(MPEG)與ITU-T的視頻編碼專家組(VCEG)聯手制定了最新的第三代視頻編碼標準H.264/AVC。其主要目的就是為了提供更高的編碼效率和更好的網絡適應性。在相同重構圖像質量下,與H.263+和MPEG-4 ASP標準相比,能節約50%的碼流;采用分層模式,定義了視頻編碼層(VCL)和網絡提取層(NAL),后者專為網絡傳輸設計,能適應不同網絡中的視頻傳輸,進一步提高網絡的“親和性”。H.264引入了面向IP包的編碼機制,有利于網絡中的分組傳輸,支持網絡中視頻的流媒體傳輸;具有較強的抗誤碼特性,特別適應丟包率高、干擾嚴重的無線視頻傳輸的要求。 二、視頻通信容錯算法的回顧 目前視頻編碼壓縮標準主要有MPEG-x和H.26x兩大系列,這些壓縮算法都是基于宏塊的,分別從三個方面改善編碼效率: (1)運動估計/運動補償(MP/MC)消除視頻時間冗余; (2)圖像差值的離散余弦變換(DCT)消除空間冗余; (3)量化系數的可變長編碼(VLC)消除統計冗余。 實踐表明,通過上述方法,視頻編碼標準獲得了極高的壓縮效率。但壓縮后的碼流在Internet,特別是無線信道上的傳輸仍然存在著一些棘手的問題,其中比較突出的一點是:一方面,這些壓縮后的碼流對信道比特誤碼非常敏感;而另一方面,無線信道由于多徑反射和衰落引入了大量的隨機誤碼和突發誤碼,影響了碼流的正常傳輸。尤其是當采用了VLC方案后,碼流更加容易受到誤碼的影響,結果在解碼端將失去與編碼端的同步,導致在遇到下一個同步碼字之前無法對VLC 碼字進行正確的解碼;同時預測編碼技術會將錯誤擴散到整個視頻序列中,極大地降低重建圖像的質量。因此,為了實現良好質量的視頻傳輸,必須結合實際應用信道的傳輸特性,采取一定的容錯措施。 根據在視頻傳輸系統中位置的不同,容錯算法主要可分為基于編碼器的容錯算法,基于解碼器的容錯算法和基于反饋信道的容錯算法。其中: (1)基于編碼器的容錯算法,通過再編碼比特流中添加冗余信息,這些冗余信息被添加在信源或信道編碼器中,降低了編碼的效率,增加了實現的復雜度,以換取編碼的容錯性能,大致包括:分層編碼、多描述編碼、獨立分段編碼、再同步編碼和前向糾錯編碼(FEC)等。 (2)基于解碼器的容錯算法,是指利用被損壞的宏塊與其相鄰的宏塊之間的相關性來完成恢復工作的,這部分工作包括錯誤檢測和錯誤恢復。對于錯誤的檢測,一般采用針對語法的檢錯和嵌入數據的檢錯;對于錯誤恢復,可采用時域和空域的錯誤隱藏方法。 (3)基于反饋信道的容錯算法,指利用解碼器獲得誤碼信息,并通過反饋信道,傳送給編碼器進行誤碼處理的一種方式。主要包括:誤碼跟蹤,有條件的ARQ,幀內/幀間編碼模式選擇和參考圖像選擇模式等。 與此同時,在信源編碼器中,從視頻碼流結構上研究其抗誤碼性能,成為近兩年來研究的一個熱點。H.264/AVC作為最新的視頻編碼標準,采取了一系列切合實際的技術措施,提高了網絡適應性,增強了數據抗誤碼的頑健性,從而保證了視頻傳輸后的壓縮視頻的QoS。與以往的視頻編碼標準不同的是,H.264/AVC標準從系統層面定義了視頻編碼層(VCL,Video Coding Layer)和網絡提取層(NAL,Network Abstraction Layer)。其中,視頻編碼層獨立于網絡,主要包括核心壓縮引擎和塊、宏塊和片的語法句法定義。通過引入一系列新特性,不但使H.264的編碼壓縮效率提升了近1倍,而且多種錯誤恢復工具又增強了視頻流的頑健性。網絡提取層的主要功能是定義數據的封裝格式,把VCL產生的比特字符串適配到各種各樣的網絡和多元環境中。涉及片級別以上的語法定義,包括獨立片解碼所要求的數據表示,類似以往視頻壓縮標準中的圖像和頭部順序數據;防止競爭的編碼;附加的增強信息以及編碼片的比特字符串。 H.264從框架結構上將NAL與VCL分離,主要有兩個目的:首先,可以定義VCL視頻壓縮處理與NAL網絡傳輸機制的接口,這樣允許視頻編碼層VCL的設計可以在不同的處理器平臺進行移植,而與NAL層的數據封裝格式無關;其二,VCL和NAL都被設計成工作于不同的傳輸環境,異構的網絡環境并不需要對VCL比特流進行重構和重編碼。下面分別就VCL和NAL對于視頻傳輸的QoS進行分析。 三、H.264的視頻編碼層的錯誤恢復[1,4] 在H.261、H.263、MPEG-1、MPEG-2、MPEG-4中,許多錯誤恢復工具已經得到了很好的應用:圖像分割的不同形式(片、塊組),I模式宏塊,片和圖像的內插,參考圖像選擇(帶有和不帶反饋、圖像級別、GOB/SLICE或MB級別),數據分割等。 H.264標準繼承了以前視頻編碼標準中某些優秀的錯誤恢復工具,同時也改進和創新了多種錯誤恢復工具。這里主要介紹H.264的錯誤恢復工具,包括參數集、靈活的宏塊排序和冗余片RS等。 1. 參數集 參數集是H.264標準的一個新概念,是一種通過改進視頻碼流結構增強錯誤恢復能力的方法。H.264的參數集又分為序列參數集和圖像參數集。其中,序列參數集包括一個圖像序列的所有信息,即兩個IDR圖像間的所有圖像信息。圖像參數集包括一個圖像的所有分片的所有相關信息,包括圖像類型、序列號等,解碼時某些序列號的丟失可用來檢驗信息包的丟失與否。多個不同的序列和圖像參數集存儲在解碼器中,編碼器依據每個編碼分片的頭部的存儲位置來選擇適當的參數集,圖像參數集本身也包括使用的序列參數集參考信息。 眾所周知,一些關鍵信息比特的丟失(如序列和圖像的頭信息)會造成解碼的嚴重負面效應,而H.264把這些關鍵信息分離出來,憑借參數集的設計,確保在易出錯的環境中能正確地傳輸。這種碼流結構的設計無疑增強了碼流傳輸的錯誤恢復能力。 參數集具體實現的方法也是多樣化的:(1)通過帶外傳輸,這種方式要求參數集通過可靠的協議,在首個片編碼到達之前傳輸到解碼器;(2)通過帶內傳輸,這需要為參數集提供更高級別的保護,例如發送復制包來保證至少有一個到達目標;(3)在編碼器和解碼器采用硬件處理參數集。 2. 片、片組和FMO 一幅圖像由若干片組成,每片包含一系列的宏塊(MB)。MB的排列可按光柵掃描順序,也可不按掃描順序。每個片獨立解碼,不同片的宏塊不能用于自身片中作預測參考。因此,片的設置不會造成誤碼擴散。 靈活的宏塊排序FMO是H.264的一大特色,適用于H.264的基本檔次和擴展檔次的應用。 圖像內部預測機制,例如幀內預測或運動矢量預測,僅允許用同一片組里的空間相鄰的宏塊。FMO通過宏塊分配映射技術,把每個宏塊分配到不按掃描順序的片中。FMO模式劃分圖像的模式各種各樣,重要的有棋盤模式、矩形模式等。當然FMO模式也可以使一幀中的宏塊順序分割,使得分割后的片的大小小于無線網絡的MTU尺寸,經過FMO模式分割后的圖像數據分開進行傳輸。 所有的MB被分成了片組0和片組1,相應地分別采用黃色和白色表示。當白片丟失時,因為其周圍的宏塊都屬于其他片的宏塊,利用鄰域相關性,黃片宏塊的某種加權可用來代替白片相應宏塊。這種錯誤隱藏機制可以明顯提高抗誤碼性能。實驗證明,在CIF圖像的視頻會議中,在丟包率達10%時,視頻失真低到需要訓練有素的眼睛才能識別。使用FMO的代價是稍微降低了編碼效率(因為它打破了原先非鄰居MB之間的預測),而且在高度優化的環境中,有較高的時延。 3. 數據分割 通常情況下,一個宏塊的數據是存放在一起而組成片的,數據劃分使得一個片中的宏塊數據重新組合,把宏塊語義相關的數據組成一個劃分,由劃分來組裝片。H.264視頻編碼標準使用了三種不同類型的數據分割。 (1)A型分割 A型分割是頭信息劃分,包括宏塊類型、量化參數和運動矢量,這個信息是最重要的。 (2)B型分割 B型分割是幀內信息劃分,包括幀內CBPs和幀內系數。幀內信息可以阻止錯誤的傳播,該型數據分割要求給定分片的A型分割有效,相對于幀間信息,幀內信息能更好地阻止漂移效應,因此它比幀間分割更為重要。 (3)C型分割 C型分割是幀間信息劃分,包括幀間CBPs和幀間系數,一般情況下它是編碼分片的最大分區。幀間分割是最不重要的,它的使用要求A型分割有效。 當使用數據分割時,源編碼器把不同類型的分割安排在3個不同的緩沖器中,同時分片的尺寸必須進行調整以保證小于MTU長度,因此是編碼器而不是NAL來實現數據分割。在解碼器上,所有分割用于信息重建。這樣,如果幀內或幀間信息丟失了,有效的幀頭信息仍然能用來提高錯誤隱藏效率,即有效的宏塊類型和運動矢量,保留了宏塊的基本特征,從而仍可獲得一個相當高的信息重構質量,而僅僅丟失了細節信息。 4. 冗余片方法 H.264中參考圖像的選擇與以前在H.263中的一樣,在基于反饋的系統中,解碼器接收到丟失或被破壞的圖像信息時,選擇參考圖像序列中正確的參考宏塊,來進行錯誤恢復;而對于無反饋的系統,H.264提出了冗余分片編碼。 冗余分片允許編碼器把在同一個碼流中添加同一MB的一個或更多冗余表示。需要注意的是這些冗余片的編碼參數與非冗余片的編碼參數不同,例如主片可用低QP(高質量)來編碼,而冗余信息中能用一個高QP(低質量)的方式來編碼,這樣質量粗糙一些但碼率更低。解碼器在重構時,首先使用主片,如果它可用就拋棄冗余片;而如主片丟失(比如因為包的丟失)冗余片也能被用于重構。冗余片主要用于支持高誤碼的移動環境。 5. 幀內編碼 H.264中幀內編碼大體上類似于以往的視頻編碼標準,但也進行了重要的改進,主要體現在: (1)H.264中幀內預測宏塊的參考宏塊可以是幀間編碼宏塊,幀內預測宏塊并不像H.263中的幀內編碼一樣,而采用預測的幀內編碼比非預測的幀內編碼有更好的編碼效率,但降低了幀內編碼的重同步性能,可以通過設置限制幀內預測標記來恢復這一性能。 (2)只包含幀內宏塊的片有兩種,一種是幀內片(I Slice),一種是立即刷新片(IDR Slice)。立即刷新片需存在于立即刷新圖像(IDR Picture)中。與短期參考圖像相比,立即刷新圖像有更強壯的重同步性能。 為了更適用無線IP網絡環境中的應用,H.264通過采用率失真優化編碼和設置幀內預測標志,來提高幀內圖像的重同步性能。 四、H.264的網絡提取層的錯誤恢復 NAL支持眾多基于包的有線/無線通信網絡,諸如H.320、MPEG-2和RTP/IP等。但目前,絕大部分的視頻應用所采用的網絡協議層次是RTP/UDP/IP,因此在下面的描述中主要基于這個傳輸框架。下面首先分析NAL層的基本處理單元NALU以及它的網絡封裝、分割和合并的方法。 1. NAL單元 每個NAL單元是一個一定語法元素的可變長字節字符串,包括包含一個字節的頭信息(用來表示數據類型),以及若干整數字節的負荷數據。一個NAL單元可以攜帶一個編碼片、A/B/C型數據分割或一個序列或圖像參數集。 NAL單元按RTP序列號按序傳送。其中,T為負荷數據類型,占5bit;R為重要性指示位,占2個bit;最后的F為禁止位,占1bit。具體如下: (1)NALU類型位 可以表示NALU的32種不同類型特征,類型1~12是H.264定義的,類型24~31是用于H.264以外的,RTP負荷規范使用這其中的一些值來定義包聚合和分裂,其他值為H.264保留。 (2)重要性指示位 用于在重構過程中標記一個NAL單元的重要性,值越大,越重要。值為0表示這個NAL單元沒有用于預測,因此可被解碼器拋棄而不會有錯誤擴散;值高于0表示此NAL單元要用于無漂移重構,且值越高,對此NAL單元丟失的影響越大。 (3)禁止位 編碼中默認值為0,當網絡識別此單元中存在比特錯誤時,可將其設為1,以便接收方丟掉該單元,主要用于適應不同種類的網絡環境(比如有線無線相結合的環境)。例如對于從無線到有線的網關,一邊是無線的非IP環境,一邊是有線網絡的無比特錯誤的環境。假設一個NAL單元到達無線那邊時,校驗和檢測失敗,網關可以選擇從NAL流中去掉這個NAL單元,也可以把已知被破壞的NAL單元前傳給接收端。在這種情況下,智能的解碼器將嘗試重構這個NAL單元(已知它可能包含比特錯誤)。而非智能的解碼器將簡單地拋棄這個NAL單元。NAL單元結構規定了用于面向分組或用于流的傳輸子系統的通用格式。在H.320和MPEG-2系統中,NAL單元的流應該在NAL單元邊界內,每個NAL單元前加一個3字節的起始前綴碼。在分組傳輸系統中,NAL單元由系統的傳輸規程確定幀界,因此不需要上述的起始前綴碼。一組NAL單元被稱為一個接入單元,定界后加上定時信息(SEI),形成基本編碼圖像。該基本編碼圖像(PCP)由一組已編碼的NAL單元組成,其后是冗余編碼圖像(RCP),它是PCP同一視頻圖像的冗余表示,用于解碼中PCP丟失情況下恢復信息。如果該編碼視頻圖像是編碼視頻序列的最后一幅圖像,應出現序列NAL單元的end,表示該序列結束。一個圖像序列只有一個序列參數組,并被獨立解碼。如果該編碼圖像是整個NAL單元流的最后一幅圖像,則應出現流的end。 H.264采用上述嚴格的接入單元,不僅使H.264可自適應于多種網絡,而且進一步提高其抗誤碼能力。序列號的設置可發現丟的是哪一個VCL單元,冗余編碼圖像使得即使基本編碼圖像丟失,仍可得到較“粗糙”的圖像。 2. H.264中的RTP 上面闡述了NAL單元的結構和實現,這里要詳細討論RTP的載荷規范和抗誤碼性能。RTP可通過發送冗余信息來減少接收端的丟包率,會增加時延,與冗余片不同的是它增加的冗余信息是個別重點信息的備份,適合于非平等保護機制。相應的多媒體傳輸規范有: (1)分組復制多次重發,發送端對最重要的比特信息分組進行復制重發,使得保證接收端能至少正確接收到一次,同時接收端要丟棄已經正確接收的分組的多余備份。 (2)基于分組的前向糾錯,對被保護的分組進行異或運算,將運算結果作為冗余信息發送到接收方。由于時延,不用于對話型應用,可用于流媒體。 (3)音頻冗余編碼,可保護包括視頻在內的任何數據流。每個分組由頭標、載荷以及前一分組的載荷組成,H.264中可與數據分割一起使用。 RTP的封裝規范總結如下: (1)額外開銷要少,使MTU尺寸在100~64千字節范圍都可以; (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的分割和合并。 (1)NALU的分割 雖然IP層的分割可以使數據塊小于64千字節,但無法在應用層實現保護,從而降低了非平等保護方案的效果。由于UDP數據包小于64千字節,而且一個片的長度對某些應用場合來說太小,所以應用層打包是RTP打包方案的一部分。目前的拆分方案正在IETF的討論之中,大致具有以下特點:①NALU的分塊以按RTP次序號升序傳輸;②能夠標記第一個和最后一個NALU分塊;③可以檢測丟失的分塊。 (2)NALU的合并 一些NALU如SEI、參數集等非常小,將它們合并在一起有利于減少頭標開銷。現有的兩種集合分組:①單一時間集合分組(STAP),按時間戳進行組合,一般用于低時延環境;②多時間集合分組(MTAP),不同時間戳也可以組合,一般用于高時延環境,比如流應用。 五、結束語 本文針對最新推出的視頻編解碼標準H.264的抗誤碼性能進行了分析,可以看到H.264/AVC標準除了擁有高效編碼的特性,還引入了一些新工具用于提高錯誤恢復能力。特別是,參數集、NAL上的NALU的概念、靈活的宏塊排序FMO、數據分割以及幀內編碼等都極大地提高了復雜網絡環境下的抗誤碼能力。同時,詳細介紹了與視頻比特流傳輸密切相關的RTP封裝規范,與H.264的NAL緊密結合,提供了對數據封裝的指導。通過附加了一些傳輸層的低開銷機制來用于NALU包的高效拆分和聚合。當聯合使用這些工具時,可以達到更高的性能,在因特網和惡劣的無線網絡上進行高質量的視頻壓縮也將最終成為現實。 |