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”,以便位元組對齊。
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 |
0 |
未使用 |
|
1 |
不分割槽、非IDR影象的片 |
2,3,4 |
2 |
片分割槽A |
2 |
3 |
片分割槽B |
3 |
4 |
片分割槽C |
4 |
5 |
IDR 影象中的片 |
2,3 |
6 |
補充增強資訊單元(SEI) |
5 |
7 |
序列引數集 |
0 |
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 標準。