H264碼流格式之NALU詳解(H264碼流格式之NALU詳解)
2023-08-03 09:37:13
H264碼流格式之NALU詳解?H264碼流格式有多種打包格式,但都會用到基本的數據單元,也即NALU單元,本文重點介紹NALU結構單元,下面我們就來聊聊關於H264碼流格式之NALU詳解?接下來我們就一起去了解一下吧!
![](http://img.xinsiji.cc/20230803/472273650620301313.png)
H264碼流格式之NALU詳解
H264碼流格式之NALU1. 簡介H264碼流格式有多種打包格式,但都會用到基本的數據單元,也即NALU單元,本文重點介紹NALU結構單元。
2. NALU結構NALU(Network Abstract Layer Unit)全稱為網絡抽象層單元,NALU類型包括VCL(Video Coding Layer ,全稱為視像編碼層)單元和非VCL NAL單元。
NALU格式由一個字節頭信息和原始字節序列負荷數據組成,即NALU Header RBSP,如下所示:
欄位 | 位寬 | 說明 | |
NALU Header | forbidden_zero_bit | 1bit | 禁止位,協議規定為0。 |
nal_ref_idc | 2bit | 重要性指示位,取值範圍0~3。值越大,代表NALU越重要,就需要優先被保護。 | |
nal_unit_type | 5bit | 負荷數據類型。值為1-5時,表示RBSP裡面包含的數據為條帶數據,統稱為VCL NAL單元,其他的NALU則稱為非VCL NAL單元。 | |
RBSP | 負荷數據 | 負荷數據長度 | 負荷數據可以是序列參數集或圖像參數集等。 |
當NAL單元為序列參數集,或圖像參數集,或一個參考圖像條帶,或一個參考圖像的條帶數據分割時,nal_ref_idc不應等於0。
當nal_unit_type 等於 6、9、10、11 或 12 的 NAL 單元時,nal_ref_idc應等於 0。
當一張圖像的其中一個條帶的NAL單元的nal_ref_idc為0時,則該圖像的所有條帶的NAL單元的nal_ref_idc都為0。
4. nal_unit_typenal_unit_type是指包含在 NAL 單元中的 RBSP 數據結構的類型,Nal 單元類型碼,如下所示:
Nal_ref_type | 內容 |
0 | 未指定 |
1 | 不分區,非IDR圖像的片 |
2 | 片分區A |
3 | 片分區B |
4 | 片分區C |
5 | IDR圖像中的片 |
6 | 輔助增強信息 (SEI) |
7 | SPS 序列參數集 |
8 | PPS 圖像參數集 |
9 | 訪問單元分隔符AUD |
10 | 序列結束 |
11 | 流結尾 |
12 | 填充數據 |
13 | 序列參數集擴展 |
14....18 | 保留 |
19 | 未分割的輔助編碼圖像的編碼條帶 |
20...23 | 保留 |
24...31 | 未指定 |
其中1~12由H.264使用,24~31由H.264以外的應用使用。
IDR幀作用是立即刷新圖像,解碼器收到IDR幀後,先清空參考幀隊列,重新查找SPS數據和PPS數據,重新建立新的參考隊列。
AUD幀作用是分隔圖像,分隔符前表示一幀圖像的結束,分隔符後標識一幀新的圖像。
5. RBSPRBSP(Raw Byte Sequence Payload)全稱原始字節序列負荷。不同的負荷類型,負荷數據代表不同的數據。
5.1 當nal_unit_type為7時,負荷數據為序列參數集。H264碼流格式是AVCC的情況,如下所示:
SPS各欄位表示如下:
字節序號 | 值(十六進位) | 說明 |
1,2 | 0x00, 0x1d | Nal單元數據長度 |
3 | 0x67 | 二進位表示01100111,nal_ref_idc為3,nal_unit_type為7,即SPS |
4-31 | 0x64-0x92 | SPS數據部分 |
5.1 當nal_unit_type為8時,負荷數據為圖像參數集,H264碼流格式是AVCC的情況,如下所示:
PPS 各欄位表示如下:
字節序號 | 值(十六進位) | 說明 |
1 | 0x01 | PPS的個數 |
2,3 | 0x00, 0x06 | PPS的數據長度 |
4 | 0x68 | 二進位表示01101000,nal_ref_idc為3,nal_unit_type為8,即PPS。 |
5-9 | 0xeb-0xc0 | PPS數據部分 |