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