天天看點

H.264 碼流結構解析 (整理)

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”,以便位元組對齊。

H.264 碼流結構解析 (整理)

3. H.264傳輸

H.264 的編碼視訊序列包括一系列的NAL單元,每個NAL 單元包含一個RBSP,見表1。編碼片(包括資料分割片IDR片)和序列RBSP 結束符被定義為VCL NAL單元,其餘為NAL 單元。典型的RBSP單元序列如圖2 所示。每個單元都按獨立的NAL單元傳送。單元的資訊頭(一個位元組)定義了RBSP 單元的類型,NAL 單元的其餘部分為RBSP資料。
H.264 碼流結構解析 (整理)
RBSP類型 描述
參數集PS 序列的全局,如圖像尺寸、視訊格式等
增強資訊SEI 視訊序列解碼的增強資訊
圖像界定PD 視訊圖像的邊界
編碼片 片的頭資訊和資料
資料分割 DP片層的資料,用于錯誤恢複解碼
序列結束符 表明下一圖像為IDR圖像
流結束符 表明該流中已沒有圖像
填充資料 啞中繼資料,用于填充位元組

4.H264碼流結構層次

H.264 碼流結構解析 (整理)

起始碼:如果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。隐藏比特位主要用于适應不同種類的網絡環境(比如有線無線相結合的環境)。

H.264 碼流結構解析 (整理)

NAL 單元解碼的流程為:首先從NAL單元中提取出RBSP 文法結構,然後按照如圖4所示的流程處理RBSP 文法結構。輸入的是NAL單元,輸出結果是經過解碼的目前圖像的樣值點。

NAL 單元中分别包含了序列參數集和圖像參數集。圖像參數集和序列參數集在其他NAL單元傳輸過程中作為參考使用,在這些資料NAL 單元的片頭中,通過文法元素pic_parameter_set_id設定它們所使用的圖像參數集編号;而相應的每個圖像參數集中,通過文法元素seq_paramter_set_id設定他們使用的序列參數集編号。

 6.各分層結構的文法元素參考G50 标準。

繼續閱讀