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