抗誤碼技術:
?????? 視頻傳輸過程中的錯誤是不可避免的,抗誤碼技術歷來都足視頻領域一個研究的熱點。H264標準繼承r以前視頻編碼標準中某些優秀的錯誤恢復工具,同時也改進和創新了多種錯誤恢復丁具。這些錯誤恢復的工具主要有:參數集、數據分割、FMO、冗余片、幀內編碼等。
參數集
?????? 參數集是H264標準的個新概念,是種通過改進視頻碼流的結構增強錯誤恢復能力的方法。其所包含的信息極為重要,它的受損將影響到大量的VCL和NAL單元,且被影響的單元即使能正確接收到也不能被正確解碼,在H.264標準中共使用了兩種類型的參數集。
(1)序列參數集(SPS),包括與圖像序列(定義為兩個IDR圖像間的所有圖像)有關的所有信息,應用于已編碼視頻序列。
(2)圖像參數集(PPS),包括所有屬于該圖像的片的相關信息,用于解碼已編碼視頻序列中的1個或多個獨立的圖像。
??????? 圖像參數集本身也要使用和參考序列參數集中的參數。多個不同的參數集存儲在解碼器中,解碼器通過參考每個已解碼片的片頭來選擇使用恰當的參數集。參數集的靈活使用大大增強了H.264抗誤碼的性能。在有誤碼傾向環境下,使用參數集的關鍵是,在相應的VCL與NAL單元到達解碼器時,確保參數集已及時可靠地到達解碼器。參數集具體實現的方法主要有:
1、通過帶外傳輸,這種方式要求參數集通過可靠的協議,在首個片解碼之前傳輸到解碼器;2、通過帶內傳輸,這需要為參數集提供更高級別的保護,例如發送復制多個分組來保證至少有一個到達目標。由于第一種方法需要額外的一個信道,以及可靠的傳輸機制,如果條件許可,應用這種傳輸方式能增強編解碼器的抗誤碼能力,但限于網絡資源的現狀,采用第二種方式似乎更為合理一些。
數據分割
??????? 由于碼流中的各語法元素的重要性各不相同,因此可以依據各語法元素的重要性使用不對等保護(UEP)技術來提高解碼端的解碼效果。在H.264中,一個片最多可以被分為3部分,分別屬于A、B和C三類,每部分被單獨封裝為一個NAL單元。
?????? 其中,數據A主要包含頭信息,比如宏塊類型、量化參數以及運動矢量等,這些參數具有最高級別的重要性。數據B主要包含幀內編碼塊的編碼模式以及幀內編碼塊的變換系數。這部分數據的丟失將會嚴重影響其后續幀的解碼質量。數據C主要包括幀間編碼塊的編碼模式以及幀間編碼塊的變換系數。與數據A和數據B相比,這部分數據的重要性最差,然而它卻是碼流數據的最大組成部分。
??????
?????? 可以看出,數據B和數據C都要依賴于數據A的正確接收才有效,而這兩部分在語法上是獨立的。由于數據A重要性最強,同時其數據量也最小,因此可以使用更可靠的信道來傳輸或是使用糾錯能力更強的碼字來保護。事實上,在碼流無法完全到達接收端時,數據A的重要性也可以體現在解碼端錯誤掩藏的運用上,這是由于運動矢量在進行時域錯誤掩藏上是非常重要的,且一般能取得非常好的效果,同時具有很低的運算量。
靈活的宏塊排序(FMo)
??????? 靈活的宏塊排序FMO是H.264的一大特色,適用于H.264的基本檔次和擴展檔次的應用。H.264標準允許以各種方式將宏塊組成片,這樣做法的好處是:(1)減小幀內誤差傳播。由于標準禁止幀內預測在不同片之間進行,這樣可以避免一個包錯誤引起的錯誤傳播至下一個片。(2)有利于解碼端錯誤掩藏的實施。當丟失塊以棋盤格或行交織的形式出現(如圖2.1l所示)時,解碼端采用錯誤掩藏技術可以取得非常好的重建圖像。這是因為在對丟失塊進行錯誤掩藏時主要利用塊之間的平滑性來恢復,因此當丟失塊周圍的塊都完好時可以取得不錯的效果。在本文后面的試驗過程中,正是采用FMO中的棋盤格模式,使得丟失塊周圍有盡可能多的可參考宏塊用于錯誤恢復。
??????? 靈活的宏塊排序(FMO)可以看成是做片交織技術的一般形式,它可以任意定義片的形狀,其主要目的就是將錯誤均勻的分散到整幀而不是某個局部區域。圖2.11顯示的棋盤格和行交織式的FMO形式。當使用FMO時,參數集中將增加一個宏塊分配表(MBA.Map),且幀中的每個塊都將按照空間光柵掃描順序依次映射在宏塊分配表中,該塊在表中的數字代表了塊屬的片,在圖2.11中,“O"代表白色塊,“1"代表灰色塊。實際上,宏塊分配表支持任意形狀的宏塊組織方式:矩形、棋盤格式、交織行等。FMO的使用,雖然提高了抗誤碼性能,卻是以犧牲編碼效率為代價的。因為它打破了原先非鄰居MB之間的預測,這在高度優化的環境中,有比較高的延遲。
冗余片(Redundant Slice)
??????? 冗余片技術,簡單地講就是,在同一個比特流中,編碼器除了片自身中已編碼地宏塊放置其中外,同一宏塊地1個或多個冗余地表示也同時被放置其中,通過利用宏塊的1個或多個冗余表示來克服誤碼造成的不可用片對重構圖像的影響。需要注意的是,這些冗余片的編碼參數與非冗余片的編碼參數不同,例如主片可用低QP(高質量)來編碼,而冗余片信息可以用高QP(低質量)的方式編碼,這樣質量粗糙一些但碼率更低。解碼器在重構時,首先使用主片,如果它可用就拋棄冗余片;而如主片丟失(比如因為分組丟失)冗余片也能被用于重構。
??????? 從上面的說明可以看出,這種冗余片技術與基于冗余的傳輸,如包復制有著本質的區別。在包復制冗余傳輸中,被復制的包和復制包一摸一樣,而冗余片技術由于其編碼參數的選擇,具有較低的碼率。因此,這種技術是在花銷較小比特數的情況下,最大限度地保證重構圖像的質量,尤其是在有誤碼傾向的移動信道或IP信道環境下,采用冗余片技術可以顯著提高重構圖像的主客觀質量。
幀內編碼
??????? 幀間編碼由于充分利用了連續序列的幀間高度相關性,具有很高的編碼效率,但是同時也對誤碼非常敏感,且錯誤會在幀間迅速傳播,使圖像質量急劇惡化。與之相比,幀內編碼不以任何重建幀為參考,可以有效防止錯誤擴散問題。因此,H.264也采用幀內編碼宏塊作為一種抗誤碼的手段,并較之前標準做了改進。在H.264中,存在兩種完全由Intra編碼宏塊組成的片:傳統的幀內編碼Slice和IDR幀的Slice。IDR幀的片在進行幀內編碼時將完全清空短期參考幀緩存(Short-Term Reference FrameBuffer)內的數據,因此它可以完全去除解碼前面幀所帶來的積累誤差。對于傳統的幀內編碼Slice,僅可以去除前面解碼幀誤差對于本幀的影響,這是因為它沒有清空短期參考幀緩存,因此在此后幀解碼時仍將參考此Intra幀前面的已解碼幀,導致誤差或錯誤將向后傳播。從這個角度來說,這種Intra幀的同步性要弱于同為Intra編碼的IDR幀。
??????? 如果在視頻序列的編碼過程中,在一定時間間隔內插入IDR幀,不僅能改善解碼端的視頻重建質量,也能起到抑制誤碼擴散的作用。當然這是以犧牲編碼效率為代價的,多幀參考相對于單幀參考能較好的提高編碼效率。同時,幀內編碼相對于幀間編碼方式,其編碼效率也大大降低。H.264通過引入幀內編碼特別是IDR幀)的方式來提升碼流的錯誤恢復能力是以編碼效率為代價的。