H264 NALU結構
當前流行的應該還算是h264,接下來中國廣播電視會使用avs,而國際上應該會使用h265(要收專利費)和Google的VP9(開源,無專利費)
一個h264視訊由N組GOP(group of picture)組成,GOP由一幀一幀被編碼的影象組成,一幀編碼影象由一個片(slice)或多個片組成,一個片由一個或多個巨集塊(MB,macroblock)組成。對於h264來說,巨集塊大小固定為16*16(16*16的Y+8*8的Cb+8*8的Cr);
//h265的巨集塊大小則是根據影象資訊由8*8到64*64變化;
H264結構上可以分為:
VCL (video codec layer) 視訊編碼層
NAL (network abstractionlayer)網路提取層
其主要優勢是兼具良好的視訊壓縮比和網路親和性;
H264編碼過程中有三種不同的資料形式:
SODB: 資料位元串,及VCL資料;
RBSP: 原始位元組序列載荷,由SODB後面新增結尾bit,1bit的1,加若干bit的0,加0是為了位元組對齊;
EBSP: 擴充套件位元組序列載荷,由RBSP基礎上新增仿校驗位元組(0x03);(Annexb封裝方式)
H264在網路上傳輸的結構為NALU,即NAL unit,其結構為:NAL頭+RBSP;實際傳輸的資料格式如下:
NALU header |
RBSP |
NALU header |
RBSP |
NALU header |
RBSP |
… |
NALU頭的結構(1byte):
Forbidden_bit(1bit) + nal_reference_bit(2bit)+ nal_unit_type(5bit)
結構圖示例:
Forbidden_bit(1bit) |
Nal_refference_bit(2bit) |
Nal_unit_type(5bit) |
1、 forbidden_bit 禁止位,初始為0,當網路發現NAL單元由bit錯誤時,可設定該bit為1,以方便糾錯或丟掉該單元;
2、 nal_reference_bit nal重要性,標誌該nal單元的重要性,值越大,越重要,解碼器在解碼效能不夠時會丟掉重要性為0的NAL單元;
3、 nal_unit_type NALU RBSP部分的資料型別
NALU列表:
nal_unit_type |
NAL型別 |
nal_reference_bit |
0 |
未使用 |
0 |
1 |
非IDR片 |
此片屬於參考幀,則不等於0;不屬於參考幀,則等於0; |
2 |
片資料A分割槽 |
同上 |
3 |
片資料B分割槽 |
同上 |
4 |
片資料C分割槽 |
同上 |
5 |
IDR影象的片 |
5 |
6 |
補充增強資訊單元(SEI) |
非0 |
7 |
序列引數集 |
非0 |
8 |
影象引數集 |
0 |
9 |
分界符 |
0 |
10 |
序列結束 |
0 |
11 |
碼流結束 |
0 |
12 |
填充 |
0 |
13~23 |
保留 |
0 |
24~31 |
不保留 |
0 |