新一代視頻編碼標準H.264/AVC的關鍵技術研究
2001年12月,ITU-T和ISO/IEC成立了JVT(Joint Video Team,視頻聯(lián)合工作組),以H.26L作為平臺,致力于制定下一代視頻編碼標準。2003年5月,正式推出H.264/AVC新標準,該標準的正式名稱為H.264/MPEG-4 part 10 AVC。H.264/AVC標準的主要目標是力求設計簡單有效的編碼技術,并具有高效的壓縮性能和易于網(wǎng)絡傳輸?shù)哪芰?,以滿足日益增長的“對話型”(移動視頻電話、會議)、“非對話型”(視頻存儲、廣播以及流媒體等)以及數(shù)碼影院、視頻監(jiān)控等視頻應用的場合。
1 H.264/AVC的基本編碼結(jié)構
與早期的視頻編碼標準相同,H.264/AVC標準沒有明確定義一對完整的編解碼器,而是定義了編碼碼流的語法和對碼流進行解碼的方法。H.264/AVC采用了與以往標準類似的運動估計/補償+分塊DCT變換的混合編碼框架。
H.264/AVC采用“返回基本”的思想去開發(fā)高性能的視頻編碼標準,即采用現(xiàn)有的基本算法和結(jié)構,通過精心優(yōu)化計算流程和方法來取得更好的視頻編碼性能。與現(xiàn)有的H.261,H.263標準相比,H.264保持了編碼器的系統(tǒng)結(jié)構不變,主要包括四個步驟:
(1)把一幀圖像劃分為小塊(Macro.Block及Block),每個小塊包含很多像素點,把對整幅圖像的編碼分成對許多小塊的處理。
(2)通過對圖像塊的變換、量化和熵編碼(或變長編碼),消除圖像中的空間冗余。
(3)由于相鄰的各幀圖像存在很大的相似性(即時間冗余),所以只需要將相鄰幀圖像間的變化進行編碼傳送即可,這是通過運動搜索和運動補償實現(xiàn)的。對每一個編碼塊,通過搜索上一編碼幀(或之前的幾幀)的相應位置來找到一個運動向量,這一向量將和幀間差值一起傳送,用于這一圖像塊的編解碼。
(4)殘余編碼:對于原始塊和相應的預測塊之間的差值進行變換、量化和熵編碼,以去除當前幀剩下的空間冗余。
但是與以前的編碼算法H.263相比,H.264加入了一些新的特性,以提高編碼效率。這些特征如下:
(1)對于進行幀內(nèi)編碼的圖像,不是直接對原始圖像進行變換、量化和編碼,而是首先采用多種不同的預測方法對圖像進行預測,然后對差值進行上述處理,以取得更佳的編碼效率。
(2)在運動搜索和運動補償方面,H.264采用了從4x 4到16×16共13種搜索塊進行運動搜索,以提高匹配程度,采用1/4像素精度進行搜索,以提高搜索精度。另外,根據(jù)對編碼延時的不同要求,H.264還可以對以前多個已編碼幀進行運動搜索,以達到最佳效果。
(3)在變換編碼方面,H.264采用了4×4的整數(shù)變換(ICT)代替DCT變換,整數(shù)變換的效果接近DCT,但運算量要少,而且在反變換過程中不會因計算精度的問題而引入誤差。
(4)在熵編碼過程中,H.264使用單一的變長編碼(UVLC)和基于內(nèi)容的上下文變長編碼(CAVLC)進行編碼。
2 編碼結(jié)構的分層處理
H.264的編碼結(jié)構在概念上分為兩層。視頻編碼層(Video Coding Layer,VCL)負責高效率的視頻壓縮能力;網(wǎng)絡適配層(Network Adaption Layer,NAL)負責網(wǎng)絡的適配,即對不同網(wǎng)絡要有不同的適應能力,例如以恰當方式對數(shù)據(jù)進行打包和傳送。H.264編碼器分層結(jié)構如圖1所示。在VCL和NAL之間定義了一個基于分組方式的接口,打包和相應的信令屬于NAL的一部分。這樣,高效率編碼和網(wǎng)絡適應性的任務則分別由VCL,和NAL來完成。
VCL包括基于塊的運動補償混合編碼和一些新特性。NAL負責針對下層網(wǎng)絡的特性對數(shù)據(jù)進行封裝,包括成幀,發(fā)信號給邏輯信道,利用同步信息等。NAL從VCL獲得數(shù)據(jù),包括頭信息、段結(jié)構信息和實際凈荷信息(如果采用數(shù)據(jù)分割技術,凈荷數(shù)據(jù)可能由幾部分組成)。NAL的任務就是要正確地將它們映射到傳輸協(xié)議上。NAL下面是各種具體的協(xié)議,如H.323,H.324等。NAL層的引入大大提高了H.264適應復雜信道的能力。
JVT標準中的NAL定義了視頻編解碼器本身和外部的接口。它的基本單元是NALUs(Nerwork Ab-straction Layer Units)。這對實現(xiàn)許多現(xiàn)行網(wǎng)絡包的傳輸方式提供了很好的支持。
一個NALU由一個一字節(jié)的頭和包含特定類型句法元素的可變長度比特串組成。一個NALU可以包含slice的編碼信息、隨機訪問點、參數(shù)集信息或補充增強信息等。NALU頭結(jié)構如下:
NALU類型(T)是一個5比特的子段,指出該NALU單元是32種不同類型中的哪一種。類型1~12已被H.264定義,類型24~31可由H.264以外的其他標準使用。RTP載荷規(guī)范將采用其中的某些值來表示包聚合和包分割。其他值被保留待將來使用。
nal_reference_idc(R)用來標記該NALU在重建過程中的重要程度。0表示該NALU不會被用作參考幀,因此允許解碼器或網(wǎng)關將之丟棄而不會引起錯誤傳播。該值越高,表示該NALU中數(shù)據(jù)越重要。這就允許網(wǎng)絡節(jié)點根據(jù)該值有力保護重要數(shù)據(jù)。
forbidden_zero_bit(F)在編碼過程中置為0,當網(wǎng)絡節(jié)點鑒別出NALU中的比特錯誤時,可以將該位置1。由于網(wǎng)絡環(huán)境不同,解碼器可能對包含比特錯誤的NALU采取不同的操作,有的則干脆丟棄。for-bidden zero bit為這種操作提供了便利。
一些使用包傳輸?shù)木W(wǎng)絡能夠直接使用NALUs,把他們直接作為H.223 AL3 SDUs或RTP包的載荷即可。然而,在一些面向碼流的系統(tǒng)面前,如ITU-T的視頻會議建議H.320和數(shù)字電視中的MPEG-2傳輸流等,需要比特或字節(jié)流的格式。因此,JVT標準定義了一種從NALUs到碼流格式的變換,即把NALUs用起始碼字封裝起來,非常符合傳統(tǒng)的視頻編碼標準,起始碼的字長可以是16 b或24 b,這依賴于該NALU載荷的重要性。起始碼字僅會出現(xiàn)在十字節(jié)對準的位置上,因此解碼器可以掃描起始碼字,用一種簡單的u1向字節(jié)的內(nèi)存復制操作把NALUs提取出來。
為了防止字節(jié)流格式中的起始碼字發(fā)生競爭現(xiàn)象,許多視頻編碼標準都非常謹慎地采用熵編碼方式。由于JVT標準包含兩種不同的熵編碼模式,所以這種起始碼字很少發(fā)生競爭現(xiàn)象。JVT依靠一種字節(jié)填充機制,即通過在NALU中可能產(chǎn)生起始碼字競爭的位置上插入非零字節(jié)來避免出現(xiàn)競爭現(xiàn)象。為方便網(wǎng)關設計,在一些看起來不必要的環(huán)境,尤其是包傳輸網(wǎng)絡中仍然執(zhí)行字節(jié)填充。由于VCL-NAL接口僅僅是概念上的,所以為防止起始碼字競爭,操作習慣上將其作為VCL熵編碼的一部分執(zhí)行。
H.264視頻流在誤碼、丟包多發(fā)的IP網(wǎng)絡上傳輸,增強了H.264視頻流的魯棒性。為了減少傳輸差錯,H.264視頻流中的時間同步可以通過采用幀內(nèi)圖像刷新來完成??臻g同步由條結(jié)構編碼(Slice Struc-tured Coding)來支持,同時為了便于誤碼以后的再同步,在一幀的視頻數(shù)據(jù)中還提供了一定的重同步點。另外,幀內(nèi)宏塊刷新和多參考幀模式可以使編碼器在決定宏塊模式時不僅考慮編碼效率,還考慮傳輸信道的特性。H.264中還定義了數(shù)據(jù)分割模式:圖像首先進行分段,段內(nèi)宏塊數(shù)據(jù)劃分為宏塊頭信息、運動矢量和DCT系數(shù)三部分,且三部分之間由標識符分隔。這樣,解碼器可較方便地檢測出受損數(shù)據(jù)的類型,減少誤碼對圖像質(zhì)量造成的損傷。這種數(shù)據(jù)分割的模式也利于信道編碼時進行不等保護,即對重要的數(shù)據(jù)進行等級較高的保護??焖俅a率控制可通過在宏塊層改變量化精度予以實現(xiàn)。
3 H.264的性能分析
通過實驗來測試H.264的編碼性能,并通過與H.263的比較,觀察H.264的編碼效率。
3.1 H.264與H.263編碼性能比較
本試驗對Grenadier Guards序列進行測試,分別對H.264和H.263編碼的保真度、PSNR、宏塊編碼比特數(shù)進行比較,結(jié)果如下:
(1)保真度測試
通過殘差比較可以很清楚地看出,H.264重構幀和參考幀的殘差比較平滑,基本沒有斑點;而H.263的殘差比較明顯,尤其是在人物附近,由于運動量大,H.263使用半像素運動矢量估計,而H.264提高到1/4像素,在1/4像素的基礎上再內(nèi)插,得到1/8像素精度的運動矢量,大大提高了圖像編碼的質(zhì)量,如圖2所示。
(2)PSNR測試(如圖2)
相對于H.263視頻編碼標準,H.264在其增強預測編碼內(nèi)容的方法上做了改進,如場、幀編碼的自適應選擇;變尺寸方塊的運動補償;高精度的運動補償;多參考幀運動補償;加權預測;整數(shù)變換;自適應熵編碼;環(huán)路去塊濾波等,這些大大提高了H.264的PSNR。由圖2可以看出,無論是亮度信號,還是色差信號,H.264的PSNR都比H.263的高。
評論