1. H.264簡介
MPEG(Moving Picture Experts Group)和VCEG(Video Coding Experts Group)已經聯合開發了一個比早期研發的MPEG和H.263 性能更好的視訊壓縮編碼标準,這就是被命名為AVC(Advanced Video Coding),也被稱為ITU-T H.264 建議和MPEG-4 的第10部分的标準,簡稱為H.264/AVC 或H.264。這個國際标準已經與2003年3 月正式被ITU-T所通過并在國際上正式頒布。為适應高清視訊壓縮的需求,2004 年又增加了FRExt 部分;為适應不同碼率及品質的需求,2006年又增加了可伸縮編碼 SVC。
2. H.264編碼格式
H.263 定義的碼流結構是分級結構,共四層。自上而下分别為:圖像層(picturelayer)、塊組層(GOB layer)、宏塊層(macroblock layer)和塊層(block layer)。而與H.263相比,H.264 的碼流結構和H.263的有很大的差別,它采用的不再是嚴格的分級結構。
H.264 支援4:2:0的連續或隔行視訊的編碼和解碼。H.264 壓縮與H.263、MPEG-4相比,視訊壓縮比提高了一倍。
H.264 的功能分為兩層:視訊編碼層(VCL, Video CodingLayer)和網絡提取層(NAL, Network Abstraction Layer)。VCL資料即編碼處理的輸出,它表示被壓縮編碼後的視訊資料序列。在VCL資料傳輸或存儲之前,這些編碼的VCL 資料,先被映射或封裝進NAL單元中。每個NAL 單元包括一個原始位元組序列負荷(RBSP, Raw Byte Sequence Payload)、一組對應于視訊編碼的NAL頭資訊。RBSP的基本結構是:在原始編碼資料的後面填加了結尾比特。一個bit“1”若幹比特“0”,以便位元組對齊。
3. H.264傳輸
H.264 的編碼視訊序列包括一系列的NAL單元,每個NAL 單元包含一個RBSP,見表1。編碼片(包括資料分割片IDR片)和序列RBSP 結束符被定義為VCL NAL單元,其餘為NAL 單元。典型的RBSP單元序列如圖2 所示。每個單元都按獨立的NAL單元傳送。單元的資訊頭(一個位元組)定義了RBSP 單元的類型,NAL 單元的其餘部分為RBSP資料。
RBSP類型 | 描述 |
參數集PS | 序列的全局,如圖像尺寸、視訊格式等 |
增強資訊SEI | 視訊序列解碼的增強資訊 |
圖像界定PD | 視訊圖像的邊界 |
編碼片 | 片的頭資訊和資料 |
資料分割 | DP片層的資料,用于錯誤恢複解碼 |
序列結束符 | 表明下一圖像為IDR圖像 |
流結束符 | 表明該流中已沒有圖像 |
填充資料 | 啞中繼資料,用于填充位元組 |
4.H264碼流結構層次
起始碼:如果NALU對應的Slice為一幀的開始,則用4位元組表示,即0x00000001;否則用3位元組表示,0x000001。
NAL Header:forbidden_bit,nal_reference_bit(優先級),nal_unit_type(類型)。
脫殼操作:為了使NALU主體不包括起始碼,在編碼時每遇到兩個位元組(連續)的0,就插入一位元組0x03,以和起始碼相差別。解碼時,則将相應的0x03删除掉。
Nal_unit_type | NAL 類型 | C |
未使用 | ||
1 | 不分區、非IDR圖像的片 | 2,3,4 |
2 | 片分區A | 2 |
3 | 片分區B | 3 |
4 | 片分區C | 4 |
5 | IDR 圖像中的片 | 2,3 |
6 | 補充增強資訊單元(SEI) | 5 |
7 | 序列參數集 | |
8 | 圖像參數集 | 1 |
9 | 分界符 | 6 |
10 | 序列結束 | 7 |
11 | 碼流結束 | 8 |
12 | 填充 | 9 |
13~23 | 保留 | |
24~31 | 未使用 |
sub_mb_pred 和mb_pred:運動補償或者是幀内預測。
5. H.264解碼
NAL 頭資訊的nal_referrence_idc(NRI)用于在重建過程中标記一個NAL單元的重要性,值為0 表示這個NAL單元沒有用預測,是以可以被解碼器抛棄而不會有錯誤擴散;值高于0 表示NAL 單元要用于無漂移重構,且值越高,對此NAL單元丢失的影響越大。
NAL 頭資訊的隐藏比特位,在H.264編碼器中預設為0,當網絡識别到單元中存在比特錯誤時,可将其置為1。隐藏比特位主要用于适應不同種類的網絡環境(比如有線無線相結合的環境)。
NAL 單元解碼的流程為:首先從NAL單元中提取出RBSP 文法結構,然後按照如圖4所示的流程處理RBSP 文法結構。輸入的是NAL單元,輸出結果是經過解碼的目前圖像的樣值點。
NAL 單元中分别包含了序列參數集和圖像參數集。圖像參數集和序列參數集在其他NAL單元傳輸過程中作為參考使用,在這些資料NAL 單元的片頭中,通過文法元素pic_parameter_set_id設定它們所使用的圖像參數集編号;而相應的每個圖像參數集中,通過文法元素seq_paramter_set_id設定他們使用的序列參數集編号。
6.各分層結構的文法元素參考G50 标準。