組成部分
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和以前的标準一樣,也是DPCM加變換編碼的混合編碼模式。但它采用“回歸基本”的簡潔設計,不用衆多的選項,獲得比H.263++好得多的壓縮性能;加強了對各種信道的适應能力,采用“網絡友好”的結構和語法,有利于對誤碼和丢包的處理;應用目标範圍較寬,以滿足不同速率、不同解析度以及不同傳輸(存儲)場合的需求。
技術上,它集中了以往标準的優點,并吸收了标準制定中積累的經驗。與H.263v2(H.263+)或MPEG-4簡單類(Simple Profile)相比,H.264在使用與上述編碼方法類似的最佳編碼器時,在大多數碼率下最多可節省50%的碼率。H.264在所有碼率下都能持續提供較高的視頻質量。
H.264能工作在低延時模式以适應實時通信的應用(如視頻會議),同時又能很好地工作在沒有延時限制的應用,如視頻存儲和以服務器為基礎的視頻流式應用。H.264提供包傳輸網中處理包丢失所需的工具,以及在易誤碼的無線網中處理比特誤碼的工具。
在系統層面上,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幀。碼流中包含SP幀後,能在有類似内容但有不同碼率的碼流之間快速切換,同時支持随機接入和快速回放模式SP-幀示意圖H.264的運動估計有以下4個特性。
(1)不同大小和形狀的宏塊分割
對每一個16×16像素宏塊的運動補償可以采用不同的大小和形狀,H.264支持7種模式,如圖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所示。大多數情況下使用簡單的之字形掃描;雙掃描僅用于使用較小量化級的塊内,有助于提高編碼效率。
5.熵編碼
視頻編碼處理的最後一步就是熵編碼,在H.264中采用了兩種不同的熵編碼方法:通用可變長編碼(UVLC)和基于文本的自适應二進制算術編碼(CABAC)。
在H.263等标準中,根據要編碼的數據類型如變換系數、運動矢量等,采用不同的VLC碼表。H.264中的UVLC碼表提供了一個簡單的方法,不管符号表述什麼類型的數據,都使用統一變字長編碼表。其優點是簡單;缺點是單一的碼表是從概率統計分布模型得出的,沒有考慮編碼符号間的相關性,在中高碼率時效果不是很好。
因此,H.264中還提供了可選的CABAC方法。算術編碼使編碼和解碼兩邊都能使用所有句法元素(變換系數、運動矢量)的概率模型。為了提高算術編碼的效率,通過内容建模的過程,使基本概率模型能适應随視頻幀而改變的統計特性。内容建模提供了編碼符号的條件概率估計,利用合适的内容模型,存在于符号間的相關性可以通過選擇要編碼符号鄰近的已編碼符号的相應概率模型來去除,不同的句法元素通常保持不同的模型。
解碼
由于藍光格式的統一,使得市面上絕大多數的高清視頻均是采用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.261、H263、MPEG-2的第二部分)中,使用片和宏塊組的劃分、幀内編碼宏塊、幀内編碼片和幀内編碼圖像來防止錯誤的擴散。之後改進的标準(H.263+、MPEG-4)中,使用多幀參考和數據分割技術來恢複錯誤。
H.264标準在以前的基礎上提出了三種關鍵技術:(1)參數集合,(2)靈活的宏塊次序(FMO),(3)冗馀片(RS)來進行錯誤的恢複。
幀内編碼
H.264中幀内編碼的技術和以前标準一樣,值得注意的是:
(1)H.264中的幀内預測編碼宏塊的參考宏塊可以是幀間編碼宏塊,幀内預測宏塊并不像H.263中的幀内編碼一樣,而采用預測的幀内編碼比非預測的幀内編碼有更好的編碼效率,但減少了幀内編碼的重同步性能,可以通過設置限制幀内預測标記來恢複這一性能。
(2)隻包含幀内宏塊的片有兩種,一種是幀内片(Islice),一種是立即刷新片(IDRslice),立即刷新片必存在于立即刷新圖像(IDRpicture)中。與短期參考圖像相比,立即刷新圖像有更強壯的重同步性能。
在無線IP網絡環境下,為了提高幀内圖像的重同步性能,要采用率失真優化編碼和設置限制幀内預測标記。
圖像分割
H.264支持一幅圖像劃分成片,片中宏塊的數目是任意的。在非FMO模式下,片中的宏塊次序是同光栅掃描順序,FMO模式下比較特殊。片的劃分可以适配不同的MTU尺寸,也可以用來交織分組打包。
參考圖像選擇
參考圖像數據選擇,不論是基于宏塊、基于片,還是基于幀,都是錯誤恢複的有效工具。對于有反饋的系統,編碼器獲得傳輸中丢失圖像區域的信息後,參考圖像可以選擇解碼已經正确接收的圖像對應的原圖像區域作參考。在沒有反饋的系統中,将會使用冗馀的編碼來增加錯誤恢複性能。
數據劃分
通常情況下,一個宏塊的數據是存放在一起而組成片的,數據劃分使得一個片中的宏塊數據重新組合,把宏塊語義相關的數據組成一個劃分,由劃分來組裝片。
在H.264中有三種不同的數據劃分。
頭信息劃分:包含片中宏塊的類型,量化參數和運動矢量,是片中最重要的信息。
幀内信息劃分:包含幀内CBPs和幀内系數,幀内信息可以阻止錯誤的蔓延。
幀間信息劃分:包含幀間CBPs和幀間系數,通常比前兩個劃分要大得多。
幀内信息劃分結合頭信息解出幀内宏塊,幀間信息劃分結合頭信息解出幀間宏塊。幀間信息劃分的重要性最低,對重同步沒有貢獻。當使用數據劃分時,片中的數據根據其類型被保存到不同的緩存,同時片的大小也要調整,使得片中最大的劃分小于MTU尺寸。
解碼端若獲得所有的劃分,就可以完整重構片;解碼端若發現幀内信息或幀間信息劃分丢失,可用的頭信息仍然有很好的錯誤恢複性能。這是因為宏塊類型和宏塊的運動矢量含有宏塊的基本特征。
使用參數集
序列的參數集(SPS)包括了一個圖像序列的所有信息,圖像的參數集(PPS)包括了一個圖像所有片的信息。多個不同的序列和圖像參數集經排序存放在解碼器。編碼器參考序列參數集設置圖像參數集,依據每一個已編碼片的片頭的存儲地址選擇合适的圖像參數集來使用。對序列的參數和圖像的參數進行重點保護才能很好地增強H.264錯誤恢複性能。
在差錯信道中使用參數集的關鍵是保證參數集及時、可靠地到達解碼端。例如,在實時信道中,編碼器用可靠控制協議及早将他們以帶外傳輸的方式發送,使控制協議能夠在引用新參數的第一個片到達之前把它們發給解碼器;另外一個辦法就是使用應用層保護,重發多個備份文件,确保至少有一個備份數據到達解碼端;第三個辦法就是在編解碼器的硬件中固化參數集設置。
宏塊次序(FMO)
靈活的宏塊次序是H.264的一大特色,通過設置宏塊次序映射表(MBAmap)來任意地指配宏塊到不同的片組,FMO模式打亂了原宏塊順序,降低了編碼效率,增加了時延,但增強了抗誤碼性能。FMO模式劃分圖像的模式各種各樣,重要的有棋盤模式、矩形模式等。當然FMO模式也可以使一幀中的宏塊順序分割,使得分割後的片的大小小于無線網絡的MTU尺寸。
經過FMO模式分割後的圖像數據分開進行傳輸,以棋盤模式為例,當一個片組的數據丢失時可用另一個片組的數據(包含丢失宏塊的相鄰宏塊信息)進行錯誤掩蓋。實驗數據顯示,當丢失率為(視頻會議應用時)10%時,經錯誤掩蓋後的圖像仍然有很高的質量。
冗馀片方法
前邊提到了當使用無反饋的系統時,就不能使用參考幀選擇的方法來進行錯誤恢複,應該在編碼時增加冗馀的片來增強抗誤碼性能。要注意的是這些冗馀片的編碼參數與非冗馀片的編碼參數不同,也就是用一個模糊的冗馀片附加在一個清晰的片之後。在解碼時先解清晰的片,如果其可用就丢棄冗馀片;否則使用冗馀模糊片來重構圖像。
優勢
1.低碼率(Low Bit Rate):和MPEG2和MPEG4ASP等壓縮技術相比,在同等圖像質量下,采用H.264技術壓縮後的數據量隻有MPEG2的1/8,MPEG4的1/3。
2.高質量的圖象:H.264能提供連續、流暢的高質量圖象(DVD質量)。
3.容錯能力強:H.264提供了解決在不穩定網絡環境下容易發生的丢包等錯誤的必要工具。
4.網絡适應性強:H.264提供了網絡抽象層(Network Abstraction Layer),使得H.264的文件能容易地在不同網絡上傳輸(例如互聯網,CDMA,GPRS,WCDMA,CDMA2000等)。
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-4ASP等壓縮技術相比,H.264壓縮技術将大大節省用戶的下載時間和數據流量收費。尤其值得一提的是,H.264在具有高壓縮比的同時還擁有高質量流暢的圖像,正因為如此,經過H.264壓縮的視頻數據,在網絡傳輸過程中所需要的帶寬更少,也更加經濟。



















