天天看點

五、H.264碼流結構NAL Unit封裝格式流格式詳解代碼提取NAL Unit

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之間的資料即可:

繼續閱讀