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