NAL Unit封裝格式
H.264的文法元素進行編碼後,生成的輸出資料都封裝為NAL Unit進行傳遞,多個NAL Unit的資料組合在一起形成總的輸出碼流。對于不同的應用場景,NAL規定了一種通用的格式适應不同的傳輸封裝類型。
通常NAL Unit的傳輸格式分兩大類:位元組流格式和RTP包格式;
1、Annex B位元組流格式:
- 大多數編碼器實作的預設輸出格式
- 以連續的bit位元組的形式傳輸碼流,是以每個NAL Unit以規定格式的起始碼分割
- 起始碼:0x00 00 00 01或0x 00 00 01
2、RTP包格式:
- 直接封裝NAL Unit,無起始碼
- 每個NAL Unit之前以幾個位元組表示NAL Unit的長度
- 按照RTP資料包的格式封裝
流格式詳解
1、流格式的H.264碼流如下圖:
- 标準協定文檔附錄B
五、H.264碼流結構NAL Unit封裝格式流格式詳解代碼提取NAL Unit - leading_zero_8bits:長度為一個位元組的0
2、NAL Unit的位元組流格式:
- leading_zero_8bits:在第一個NAL單元之前的字首0位元組;
- zero_byte:一個位元組的0字元;
- start_code_prefix_one_3bytes:3個字元的起始字首符,值為0x 00 00 01,與zero_byte共同構成一個0x 00 00 00 01的字首符;
- nal_unit:表示一個NAL Unit的比特位;
- trailing_zero_8bits:結束0字元;
3、H264碼流頭部解析
- 查找start_code_prefix之間的資料,是為一個NAL Uint的有效資料
- 如下圖是一段H264碼流的頭部:
五、H.264碼流結構NAL Unit封裝格式流格式詳解代碼提取NAL Unit - NAL Unit的實際内容為:67 42 00 1E F1 61 62 62
- start_code_prefix:0x00 00 00 01或0x00 00 01
代碼提取NAL Unit
對于位元組流格式的H.264碼流,從原始碼流中讀取NAL Unit的方法為檢測兩個起始碼0x 00 00 01或0x 00 00 00 01之間的資料即可: