H264Nalu頭部解析

2021-10-10 09:15:56 字數 1562 閱讀 2832

一 nalu頭部解析

f:forbidden_zero_bit. 在 h.264 規範中規定了這一位必須為 0.

nri:

nal_ref_idc. 取00~11,似乎指示這個nalu的重要性,如00的nalu解碼器可以丟棄它而不影響影象的回放,0~3,取值越大,表示當前nal越重要,需要優先受到保護。如果當前nal是屬於參考幀的片,或是序列引數集,或是影象引數集這些重要的單位時,本句法元素必需大於0。

type:

標識nal單元中的rbsp資料型別,其中,nal_unit_type為1, 2, 3, 4, 5的nal單元稱為vcl的nal單元,其他型別的nal單元為非vcl的nal單元。

二 nalu type 解析nalu type的計算方式

在每一幀的起始碼(00 00 00 01)之後取到nalu頭部code 乙個位元組

用該公式計算nalutype :int type = code & 0x1fnalu type

nal_unit_type. 這個nalu單元的型別,1~12由h.264使用,24~31由h.264以外的應用使用,簡述如下:0 沒有定義

1-23 nal單元 單個 nal 單元包

1 不分割槽,非idr影象的片

2 片分割槽a

3 片分割槽b

4 片分割槽c

5 idr影象中的片

6 補充增強資訊單元(sei)

7 sps

8 pps

9 序列結束

10 序列結束

11 碼流結束

12 填充

13-23 保留

24 stap-a 單一時間的組合包

25 stap-b 單一時間的組合包

26 mtap16 多個時間的組合包

27 mtap24 多個時間的組合包

28 fu-a 分片的單元

29 fu-b 分片的單元

30-31 沒有定義

常見資料幀

序列引數集 sps----7:

影象引數集 pps----8:

關鍵幀 idr 幀----5:

i幀表示關鍵幀,你可以理解為這一幀畫面的完整保留;解碼時只需要本幀資料就可以完成(因為包含完整畫面)

p幀 ----1:

p幀表示的是這一幀跟之前的乙個關鍵幀(或p幀)的差別,解碼時需要用之前快取的畫面疊加上本幀定義的差別,生成最終畫面。(也就是差別幀,p幀沒有完整畫面資料,只有與前一幀的畫面差別的資料)

三 參考**

h264nalu頭部解析可參考ffmpeg原始碼

h264_parser.c的parse_nal_units函式

h264 NALU的獲取與分析

0x00000001或0x000001是乙個nalu的起始標誌,遇到下乙個此標誌時為該nalu的結尾。起始標誌的後面第乙個位元組 type 裡包含有nalu的型別,type 0x1f即為該nalu的型別 nal unit type 具體型別分析詳見下節。nal unit type 7時,nalu為s...

H264 NALU 使用PS封裝 RTP傳送

最近由於專案平台需求,要將h264 nalu封裝為ps再用rtp傳送,ps封裝按照iso dec 13818 1標準。乙個ps包包含ps header,pes header,ps system header,ps system map等。針對h264做如下ps封裝 1 每個idr nalu前一般都會...

H264系列(4) h264協議幀頭資料解析

對原作者表示感謝!h264常見的幀頭資料為 00 00 00 01 67 sps 00 00 00 01 68 pps 00 00 00 01 65 idr 幀 00 00 00 01 61 p幀 等等,那麼他們代表的意思是什麼呢?start code有兩種,四個位元組的 00 00 00 01 和...