1. 程式人生 > >H.264 碼流結構解析 (整理)

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

1. H.264簡介

MPEGMoving Picture Experts Group)和VCEGVideo Coding Experts Group)已經聯合開發了一個比早期研發的MPEGH.263 效能更好的視訊壓縮編碼標準,這就是被命名為AVCAdvanced Video Coding),也被稱為ITU-T H.264 建議和MPEG-4 的第10部分的標準,簡稱為H.264/AVC H.264。這個國際標準已經與20033 月正式被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.263MPEG-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 Headerforbidden_bitnal_reference_bit(優先順序),nal_unit_type(型別)。

脫殼操作:為了使NALU主體不包括起始碼,在編碼時每遇到兩個位元組(連續)的0就插入一位元組0x03,以和起始碼相區別。解碼時,則將相應的0x03刪除掉。

Nal_unit_type

NAL 型別

C

0

未使用

1

不分割槽、非IDR影象的片

234

2

片分割槽A

2

3

片分割槽B

3

4

片分割槽C

4

5

IDR 影象中的片

23

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_idcNRI)用於在重建過程中標記一個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 標準。