NAL Unit解析

NAL Unit結構解析

NAL Unit包含NAL Header 和 NAL Body
NAL Header: 一個字節,包括:

  • forbidden_zero_bit: 0禁止位,1bit;
  • nal_ref_idc:參考索引,代表當前NAL Unit重要性,2bit;
  • nal_unit_type: NAL Unit類型,5bit;

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
NAL Unit的頭很簡單,下面看看body

  • NAL Body包含了有效負載數據及其封裝
  • NAL Body自外向內的封裝共3層
    1. 第一層:EBSP–擴展字節序列載荷
    2. 第二層:RBSP–原始字節序列載荷
    3. 第三層:SODB–數據字節流

EBSP (Extended Byte String Payload)

  • 等同於NAL Body數據本身;
  • 在EBSP中(可能)包含了一個特殊的字節0x03,表示“防止競爭校驗字節”(emulation_prevention_three_byte);
  • 作用:防止NAL Body內部出現與NAL Unit起始碼0x 00 00 01或0x 00 00 00 01衝突。

怎麼防止衝突的?
在這裏插入圖片描述
在這裏插入圖片描述
官方代碼表格:如果出現兩個00,後邊會加入一個競爭防止位,這樣24個bit爲0x000003
解析時看到兩個00把03去掉再解析,把03去掉後得到第二層數據RBSP

RBSP:Raw Byte Sequence Payload

  • 原始字節序列載荷:相當於NAL Body去掉附加03字節之後的數據;
  • 同原始的語法元素碼流相比,RBSP在末尾增加了rbsp_trailing_bits()部分;
  • rbsp_trailing_bits():包括一個1bits和若干個0bit,用於實現字節的對齊

這樣的RBSP數據是否就是語法元素值本身呢?語法元素進行編碼之後,並不是按照每個bit進行對齊的,他可能在某個字節餘下了幾個bit的空餘。所以空餘需要用rbsp_trailing_bits填充,以實現字節的對齊。

最裏邊的一層稱作SODB
SODB:String Of Data Bits

  • 表示H.264的語法元素編碼完成後的實際的原始二進制碼流。SODB通常不能保證字節對齊。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章