H.264/AVC原理介绍
H.264/AVC原理介紹
- 一.H.264/AVC框架圖
- 1.VCL (VideoCoding Layer,視頻編碼層)
- 2.NAL(NetworkAbstraction Layer,網絡提取層)
- 二.H264/AVC原理介紹
- 1.介紹
- 2.優勢
- 3.特點
- 4.技術原理
- 冗余處理
- 市場
一.H.264/AVC框架圖
AVC: AVC(Advanced Video Coding
圖1(自己總結)
圖2(官網提供)
H.264的功能分兩層
VCL (VideoCoding Layer,視頻編碼層):負責高效的視頻內容表示。
NAL(NetworkAbstraction Layer,網絡提取層):負責以網絡所要求的恰當的方式對數據進行打包和傳送。
1.VCL (VideoCoding Layer,視頻編碼層)
幀間和幀內預測(Estimation)、
變換(Transform)和反變換、
量化(Quantization)和反量化、
環路濾波(Loop Filter)、
熵編碼(Entropy Coding)。
2.NAL(NetworkAbstraction Layer,網絡提取層)
網絡封裝格式
RTP: RTP 12字節頭 + NALU,一般UDP傳輸
RTMP: RTMP頭 + NALU,一般TCP傳輸 。RTMP客戶端向服務器傳輸,RTMP就是直播形式。
RTSP:RTSP頭 + NALU, 一般UDP傳輸 。RTSP同時走控制指令和視頻圖像。
二.H264/AVC原理介紹
1.介紹
H.264/AVC 也可以叫做 H.264/MPEG-4 part 10 AVC,這是一個聯合名字,H.264 冠的是 ITU-T 的名稱,AVC(Advanced Video Coding) 冠的是 ISO-IEC 的名字。H.264,同時也是MPEG-4第十部分,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態圖像專家組(MPEG)聯合組成的聯合視頻組(JVT,Joint Video Team)提出的高度壓縮數字視頻編解碼器標準。這個標準通常被稱之為H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明確的說明它兩方面的開發者。
H264標準各主要部分有Access Unit delimiter(訪問單元分割符),SEI(附加增強信息),primary coded picture(基本圖像編碼),Redundant Coded Picture(冗余圖像編碼)。還有Instantaneous Decoding Refresh(IDR,即時解碼刷新)、Hypothetical Reference Decoder(HRD,假想參考解碼)、Hypothetical Stream Scheduler(HSS,假想碼流調度器)。
H.264是在MPEG-4技術的基礎之上建立起來的,其編解碼流程主要包括5個部分:幀間和幀內預測(Estimation)、變換(Transform)和反變換、量化(Quantization)和反量化、環路濾波(Loop Filter)、熵編碼(Entropy Coding)。
H.264標準的主要目標是:與其它現有的視頻編碼標準相比,在相同的帶寬下提供更加優秀的圖象質量。通過該標準,在同等圖象質量下的壓縮效率比以前的標準(MPEG2)提高了2倍左右。
H.264可以提供11個等級、7個類別的子協議格式(算法),其中等級定義是對外部環境進行限定,例如帶寬需求、內存需求、網絡性能等等。等級越高,帶寬要求就越高,視頻質量也越高。類別定義則是針對特定應用,定義編碼器所使用的特性子集,并規范不同應用環境中的編碼器復雜程度。
2.優勢
1.低碼率(Low Bit Rate):和MPEG2和MPEG4 ASP等壓縮技術相比,在同等圖像質量下,采用H.264技術壓縮后的數據量只有MPEG2的1/8,MPEG4的1/3。 [1]
2.高質量的圖像:H.264能提供連續、流暢的高質量圖像(DVD質量)。 [1]
3.容錯能力強:H.264提供了解決在不穩定網絡環境下容易發生的丟包等錯誤的必要工具。 [1]
4.網絡適應性強:H.264提供了網絡抽象層(Network Abstraction Layer),使得H.264的文件能容易地在不同網絡上傳輸(例如互聯網,CDMA,GPRS,WCDMA,CDMA2000等)。 [1]
H.264最大的優勢是具有很高的數據壓縮比率,在同等圖像質量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個例子,原始文件的大小如果為88GB,采用MPEG-2壓縮標準壓縮后變成3.5GB,壓縮比為25∶1,而采用H.264壓縮標準壓縮后變為879MB,從88GB到879MB,H.264的壓縮比達到驚人的102∶1。低碼率(Low Bit Rate)對H.264的高的壓縮比起到了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術相比,H.264壓縮技術將大大節省用戶的下載時間和數據流量收費。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像,正因為如此,經過H.264壓縮的視頻數據,在網絡傳輸過程中所需要的帶寬更少,也更加經濟。
3.特點
H264標準的主要特點如下:
1.更高的編碼效率:同H.263等標準的特率效率相比,能夠平均節省大于50%的碼率。
2.高質量的視頻畫面:H.264能夠在低碼率情況下提供高質量的視頻圖像,在較低帶寬上提供高質量的圖像傳輸是H.264的應用亮點。
3.提高網絡適應能力:H.264可以工作在實時通信應用(如視頻會議)低延時模式下,也可以工作在沒有延時的視頻存儲或視頻流服務器中。
4.采用混合編碼結構:同H.263相同,H.264也使用采用DCT變換編碼加DPCM的差分編碼的混合編碼結構,還增加了如多模式運動估計、幀內預測、多幀預測、基于內容的變長編碼、4x4二維整數變換等新的編碼方式,提高了編碼效率。
5.H.264的編碼選項較少:在H.263中編碼時往往需要設置相當多選項,增加了編碼的難度,而H.264做到了力求簡潔的“回歸基本”,降低了編碼時復雜度。
6.H.264可以應用在不同場合:H.264可以根據不同的環境使用不同的傳輸和播放速率,并且提供了豐富的錯誤處理工具,可以很好的控制或消除丟包和誤碼。
7.錯誤恢復功能:H.264提供了解決網絡傳輸包丟失的問題的工具,適用于在高誤碼率傳輸的無線網絡中傳輸視頻數據。
8.較高的復雜度:264性能的改進是以增加復雜性為代價而獲得的。據估計,H.264編碼的計算復雜度大約相當于H.263的3倍,解碼復雜度大約相當于H.263的2倍。
4.技術原理
在系統層面上,H.264提出了一個新的概念,在視頻編碼層(Video Coding Layer,VCL)和網絡提取層(Network Abstraction Layer,NAL)之間進行概念性分割,前者是視頻內容的核心壓縮內容之表述,后者是通過特定類型網絡進行遞送的表述,這樣的結構便于信息的封裝和對信息進行更好的優先級控制。
編碼
1.幀內預測編碼
幀內編碼用來縮減圖像的空間冗余。為了提高H.264幀內編碼的效率,在給定幀中充分利用相鄰宏塊的空間相關性,相鄰的宏塊通常含有相似的屬性。因此,在對一給定宏塊編碼時,首先可以根據周圍的宏塊預測(典型的是根據左上角宏塊、左邊宏塊和上面宏塊,因為此宏塊已經被編碼處理),然后對預測值與實際值的差值進行編碼,這樣,相對于直接對該幀編碼而言,可以大大減小碼率。
H.264提供9種模式進行4×4像素宏塊預測,包括1種直流預測和8種方向預測。在圖中,相鄰塊的A到I共9個像素均已經被編碼,可以被用以預測,如果我們選擇模式4,那么,a、b、c、d4個像素被預測為與E相等的值,e、f、g、h4個像素被預測為與F相等的值,對于圖像中含有很少空間信息的平坦區,H.264也支持16×16的幀內編碼。
2.幀間預測編碼
幀間預測編碼利用連續幀中的時間冗余來進行運動估計和補償。H.264的運動補償支持以往的視頻編碼標準中的大部分關鍵特性,而且靈活地添加了更多的功能,除了支持P幀、B幀外,H.264還支持一種新的流間傳送幀——SP幀,如圖3所示。碼流中包含SP幀后,能在有類似內容但有不同碼率的碼流之間快速切換,同時支持隨機接入和快速回放模式。圖3 SP-幀示意圖H.264的運動估計有以下4個特性。
(1)不同大小和形狀的宏塊分割
對每一個16×16像素宏塊的運動補償可以采用不同的大小和形狀,H.264支持7種模式,如圖4所示。小塊模式的運動補償為運動詳細信息的處理提高了性能,減少了方塊效應,提高了圖像的質量。圖4 宏塊分割方法
(2)高精度的亞像素運動補償
在H.263中采用的是半像素精度的運動估計,而在H.264中可以采用1/4或者1/8像素精度的運動估值。在要求相同精度的情況下,H.264使用1/4或者1/8像素精度的運動估計后的殘差要比H.263采用半像素精度運動估計后的殘差來得小。這樣在相同精度下,H.264在幀間編碼中所需的碼率更小。
(3)多幀預測
H.264提供可選的多幀預測功能,在幀間編碼時,可選5個不同的參考幀,提供了更好的糾錯性能,這樣更可以改善視頻圖像質量。這一特性主要應用于以下場合:周期性的運動、平移運動、在兩個不同的場景之間來回變換攝像機的鏡頭。
(4)去塊濾波器
H.264定義了自適應去除塊效應的濾波器,這可以處理預測環路中的水平和垂直塊邊緣,大大減少了方塊效應。
3.整數變換
在變換方面,H.264使用了基于4×4像素塊的類似于DCT的變換,但使用的是以整數為基礎的空間變換,不存在反變換因為取舍而存在誤差的問題,變換矩陣如圖5所示。與浮點運算相比,整數DCT變換會引起一些額外的誤差,但因為DCT變換后的量化也存在量化誤差,與之相比,整數DCT變換引起的量化誤差影響并不大。此外,整數DCT變換還具有減少運算量和復雜度,有利于向定點DSP移植的優點。
4.量化
H.264中可選52種不同的量化步長,這與H.263中有31個量化步長很相似,但是在H.264中,步長是以12.5%的復合率遞進的,而不是一個固定常數。
在H.264中,變換系數的讀出方式也有兩種:之字形(Zigzag)掃描和雙掃描,如圖6所示。大多數情況下使用簡單的之字形掃描;雙掃描僅用于使用較小量化級的塊內,有助于提高編碼效率。圖6 變換系數的讀出方式
5.熵編碼
熵編碼即編碼過程中按熵原理不丟失任何信息的編碼。信息熵為信源的平均信息量(不確定性的度量)。常見的熵編碼有:香農(Shannon)編碼、哈夫曼(Huffman)編碼和算術編碼(arithmetic coding)。
視頻編碼處理的最后一步就是熵編碼,在H.264中采用了兩種不同的熵編碼方法:通用可變長編碼(UVLC)和基于文本的自適應二進制算術編碼(CABAC)。
在H.263等標準中,根據要編碼的數據類型如變換系數、運動矢量等,采用不同的VLC碼表。H.264中的UVLC碼表提供了一個簡單的方法,不管符號表述什么類型的數據,都使用統一變字長編碼表。其優點是簡單;缺點是單一的碼表是從概率統計分布模型得出的,沒有考慮編碼符號間的相關性,在中高碼率時效果不是很好。
因此,H.264中還提供了可選的CABAC方法。算術編碼使編碼和解碼兩邊都能使用所有句法元素(變換系數、運動矢量)的概率模型。為了提高算術編碼的效率,通過內容建模的過程,使基本概率模型能適應隨視頻幀而改變的統計特性。內容建模提供了編碼符號的條件概率估計,利用合適的內容模型,存在于符號間的相關性可以通過選擇要編碼符號鄰近的已編碼符號的相應概率模型來去除,不同的句法元素通常保持不同的模型。
H.264為解決不同應用中的網絡傳輸的差異。定義了兩層:視頻編碼層(VCL:Video Coding Layer)負責高效的視頻內容表示,網絡提取層(NAL:Network AbstractionLayer)負責以網絡所要求的恰當的方式對數據進行打包和傳送(如圖所示: 標準的整體框架)。
基本層次(Baseline Profile):該層次使用了H.264的除了B-Slices,CABAC以及交織編碼模式外所有的特性。該層次主要使用于低時延的實時應用場合。
主要層次(Main Profile):包含Baseline profile的所有特性,并包括了B-slices,CABAC以及交織編碼模式。它主要針對對時延要求不高,當壓縮率和質量要求較高的場合。
擴展層次(Profile X):支持所有Baseline profile的特性,但不支持CABAC以及基于宏塊的自適應幀場編碼。該層次主要針對的是各種網絡視頻流傳輸方面的應用。
1.分層設計 H.264的算法在概念上可以分為兩層:視頻編碼層負責高效的視頻內容表示,網絡提取層(NAL:Network Abstraction Layer)負責以網絡所要求的恰當的方式對數據進行打包和傳送。在VCL和NAL之間定義了一個基于分組方式的接口,打包和相應的信令屬于NAL的一部分。這樣,高編碼效率和網絡友好性的任務分別由VCL和NAL來完成。
VCL層包括基于塊的運動補償混合編碼和一些新特性。與前面的視頻編碼標準一樣,H.264沒有把前處理和后處理等功能包括在草案中,這樣可以增加標準的靈活性。
NAL負責使用下層網絡的分段格式來封裝數據,包括組幀、邏輯信道的信令、定時信息的利用或序列結束信號等。例如,NAL支持視頻在電路交換信道上的傳輸格式,支持視頻在Internet上利用RTP/UDP/IP傳輸的格式。NAL包括自己的頭部信息、段結構信息和實際載荷信息,即上層的VCL數據。(如果采用數據分割技術,數據可能由幾個部分組成)。
2.高精度、多模式運動估計
H.264支持1/4或1/8像素精度的運動矢量。在1/4像素精度時可使用6抽頭濾波器來減少高頻噪聲,對于1/8像素精度的運動矢量,可使用更為復雜的8抽頭的濾波器。在進行運動估計時,編碼器還可選擇"增強"內插濾波器來提高預測的效果。
在H.264的運動預測中,一個宏塊(MB)可以按圖2被分為不同的子塊,形成7種不同模式的塊尺寸。這種多模式的靈活和細致的劃分,更切合圖像中實際運動物體的形狀,大大提高了運動估計的精確程度。在這種方式下,在每個宏塊中可以包含有1、2、4、8或16個運動矢量。
在H.264中,允許編碼器使用多于一幀的先前幀用于運動估計,這就是所謂的多幀參考技術。例如2幀或3幀剛剛編碼好的參考幀,編碼器將選擇對每個目標宏塊能給出更好的預測幀,并為每一宏塊指示是哪一幀被用于預測。
3.4×4塊的整數變換
H.264與先前的標準相似,對殘差采用基于塊的變換編碼,但變換是整數操作而不是實數運算,其過程和DCT基本相似。這種方法的優點在于:在編碼器中和解碼器中允許精度相同的變換和反變換,便于使用簡單的定點運算方式。也就是說,這里沒有"反變換誤差"。變換的單位是4×4塊,而不是以往常用的8×8塊。由于用于變換塊的尺寸縮小,運動物體的劃分更精確,這樣,不但變換計算量比較小,而且在運動物體邊緣處的銜接誤差也大為減小。為了使小尺寸塊的變換方式對圖像中較大面積的平滑區域不產生塊之間的灰度差異,可對幀內宏塊亮度數據的16個4×4塊的DC系數(每個小塊一個,共16個)進行第二次4×4塊的變換,對色度數據的4個4×4塊的DC系數(每個小塊一個,共4個)進行2×2塊的變換。
H.264為了提高碼率控制的能力,量化步長的變化的幅度控制在12.5%左右,而不是以不變的增幅變化。變換系數幅度的歸一化被放在反量化過程中處理以減少計算的復雜性。為了強調彩色的逼真性,對色度系數采用了較小量化步長。
4.統一的VLC
H.264中熵編碼有兩種方法,一種是對所有的待編碼的符號采用統一的VLC(UVLC :Universal VLC),另一種是采用內容自適應的二進制算術編碼(CABAC:Context-Adaptive Binary Arithmetic Coding)。CABAC是可選項,其編碼性能比UVLC稍好,但計算復雜度也高。UVLC使用一個長度無限的碼字集,設計結構非常有規則,用相同的碼表可以對不同的對象進行編碼。這種方法很容易產生一個碼字,而解碼器也很容易地識別碼字的前綴,UVLC在發生比特錯誤時能快速獲得重同步。
5.幀內預測
在先前的H.26x系列和MPEG-x系列標準中,都是采用的幀間預測的方式。在H.264中,當編碼Intra圖像時可用幀內預測。對于每個4×4塊(除了邊緣塊特別處置以外),每個像素都可用17個最接近的先前已編碼的像素的不同加權和(有的權值可為0)來預測,即此像素所在塊的左上角的17個像素。顯然,這種幀內預測不是在時間上,而是在空間域上進行的預測編碼算法,可以除去相鄰塊之間的空間冗余度,取得更為有效的壓縮。
按照所選取的預測參考的點不同,亮度共有9類不同的模式,但色度的幀內預測只有1類模式。
6.面向IP和無線環境
H.264 草案中包含了用于差錯消除的工具,便于壓縮視頻在誤碼、丟包多發環境中傳輸,如移動信道或IP信道中傳輸的健壯性。
為了抵御傳輸差錯,H.264視頻流中的時間同步可以通過采用幀內圖像刷新來完成,空間同步由條結構編碼(slice structured coding)來支持。同時為了便于誤碼以后的再同步,在一幅圖像的視頻數據中還提供了一定的重同步點。另外,幀內宏塊刷新和多參考宏塊允許編碼器在決定宏塊模式的時候不僅可以考慮編碼效率,還可以考慮傳輸信道的特性。
除了利用量化步長的改變來適應信道碼率外,在H.264中,還常利用數據分割的方法來應對信道碼率的變化。從總體上說,數據分割的概念就是在編碼器中生成具有不同優先級的視頻數據以支持網絡中的服務質量QoS。例如采用基于語法的數據分割(syntax-based data partitioning)方法,將每幀數據的按其重要性分為幾部分,這樣允許在緩沖區溢出時丟棄不太重要的信息。還可以采用類似的時間數據分割(temporal data partitioning)方法,通過在P幀和B幀中使用多個參考幀來完成。
在無線通信的應用中可以通過改變每一幀的量化精度或空間/時間分辨率來支持無線信道的大比特率變化。可是,在多播的情況下,要求編碼器對變化的各種比特率進行響應是不可能的。因此,不同于MPEG-4中采用的精細分級編碼FGS(Fine Granular Scalability)的方法(效率比較低),H.264采用流切換的SP幀來代替分級編碼。
由于藍光格式的統一,使得市面上絕大多數的高清視頻均是采用H.264的格式編碼,它又分為四個最主要步驟,分別是流處理,逆變換,動態補償,去方塊濾波,這四步也是資源消耗的主要四個部分。
H.264解碼的四個步驟中的第一步“CAVLC/CABAC解碼”是最為消耗運算資源,這方面遠高于其他三步(簡單的說,CAVLC/CABAC是H.264編碼規范中兩種不同的算法,都是為了提高壓縮比,其中CABAC比CAVLC壓縮率更高,但解碼時自然也要求更高)。
如果所有四個步驟全采用處理器純軟件解碼運算,當碰上HDDVD版本的高碼率H.264視頻,處理器的負載會非常巨大,即使能流暢播放高清視頻,也會因為處理器壓力過重而影響其他同時開啟的應用程序的執行效率。
如果讓處理器解碼“CAVLC/CABAC解碼”和“反向轉換(Inverse Transformation)”兩部分,由顯示核心承擔“運動補償”和“解碼去塊”功能,則可以在一定程度上降低處理器的壓力。不過對于使用單核處理器或低端雙核處理器的用戶來說,這依然無法很好的應付這類視頻;其次,碰上編碼率更高的視頻,依然會給處理器造成很大的處理難度,導致視頻播放的不確定性,可能消費者會遇到某些視頻可以流暢播放,但是有些視頻卻丟幀的情況。
冗余處理
H.264與以前的國際標準如H.263和MPEG-4相比,為達到高效的壓縮,充分利用了各種冗余,統計冗余和視覺生理冗余。
1.統計冗余:頻譜冗余(指色彩分量之間的相關性),空間冗余,還有時間冗余。這是視頻壓縮區別于靜止圖像的根本點,視頻壓縮主要利用時間冗余來實現大的壓縮比。
2.視覺生理冗余
視覺生理冗余是由于人類的視覺系統(HVS)特性造成的,比如人眼對色彩分量的高頻分量沒有對亮度分量的高頻分量敏感,對圖像高頻(即細節)處的噪聲不敏感等。
針對這些冗余,視頻壓縮算法采用了不同的方法加以利用,但主要的考慮是集中在空間冗余和時間冗余上。H.264也采用混合(hybrid)結構,即對空間冗余和時間冗余分別進行處理。對空間冗余,標準通過變換及量化達到消除的目的,這樣編碼的幀叫I幀;而時間冗余則是通過幀間預測,即運動估計和補償來去除,這樣編碼的幀叫P幀或B幀。與以前標準不同的是,H.264在編碼I幀時,采用了幀內預測,然后對預測誤差進行編碼。這樣就充分利用了空間相關性,提高了編碼效率。H.264幀內預測以16x16的宏塊為基本單位。首先,編碼器將與當前宏塊同一幀的鄰近像素作為參考,產生對當前宏塊的預測值,然后對預測殘差進行變換與量化,再對變換與量化后的結果做熵編碼。熵編碼的結果就可以形成碼流了。由于在解碼器端能夠得到的參考數據都是經過反變換與反量化后的重建圖像,因此為了使編解碼一致,編碼器端用于預測的參考數據就和解碼器端一樣,也是經過反變換與反量化后的重建圖像。
市場
按編解碼功能劃分,H.264市場可劃分為解碼市場、編碼市場。
解碼
H.264解碼產品,主要有:支持H.264標準的解碼集成電路,含專用解碼芯片和系統芯片SoC;支持H.264標準的解碼軟件,用于各類電子產品。
最先大規模采用H.264解碼芯片的,是衛星高清機頂盒。由于H.264技術能夠顯著提高壓縮效率,一個衛星轉發器發送的高清電視節目,可以從過去的1個頻道增加到3個頻道(配合DVB-S2等新型傳輸技術),故美國及歐洲的衛星運營商從2004年起相繼采用H.264解碼芯片。至今,支持H.264標準,已經成為各類高清機頂盒SoC芯片的標準配置,且被高清電視機的SoC芯片廣泛采用。
隨著互聯網視頻服務的快速崛起,各類智能電子設備都陸續支持視頻網絡下載及播放。H.264標準一直是網絡視頻的主要壓縮技術之一,且在又有逐步取代Flash視頻格式的發展趨勢。其主要支持者,是微軟的IE瀏覽器和蘋果公司的系列產品,前者保證了H.264在桌面設備市場的優勢,后者保證了H.264在便攜設備市場的優勢。 [2]
然而,由于谷歌公司決定在其新一代瀏覽器Chrome中支持新的視頻編解碼技術WebM、而不支持H.264,使得H.264在網絡視頻市場的前景受到很大的挑戰。
編碼
由于H.264出色的編碼效率,使其很快就被以視頻監控設備為主體的編碼設備市場所接受。
H.264高效的編碼效率,對相同視頻節目占用較小的網絡帶寬和存儲空間。H.264編碼器的主要指標有:支持的分辨率和幀率,編碼延時,編碼碼流兼容性,碼流控制精度等指標。大部分編碼器分辨率支持到1920X1080,幀率為25幀(PAL)或者30幀(N制),編碼延時在200毫秒以上。
參考來源:
百度百科:H264
總結
以上是生活随笔為你收集整理的H.264/AVC原理介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恒温箱温度计算机控制系统仿真,实验用恒温
- 下一篇: 电梯继续上升,到几楼,才会发现事情真相呢