1. 程式人生 > >H264裸碼流I/P/B幀型別判別

H264裸碼流I/P/B幀型別判別

  花了兩天時間做了個h264裸流nal型別和frame型別檢測的工具,已上傳至github,有需要的自行下載。

 

1.NAL型別檢測

  nal型別檢測非常容易,對照下表即可容易判斷型別。

  較常用nal型別包括:SPS(7)、PPS(8)、IDR(5)、SLICE(1)。

  而nal_type嵌在碼流資料的nal_header(size=1Byte)中,佔據據該位元組的後五位bits。

  nal_header結構為:F(1bit) + NRI(2bits) + NAL_Type(5bits)。

  因此,用winhex看裸流的二進位制資料時,通常看到start_code後的nal_header為:0x67, 0x68, 0x65, 0x41,其分別對應SPS、PPS、I幀、P幀或B幀。

  如下一段裸流,可以看出:(紅色為SPS,綠色為PPS,藍色為I幀)

 

2.frame型別檢測

  從nal_header可以容易找到I幀(0x65),但卻無法分辨出P幀和B幀,因為nal_header都是0x41(對應於nal_unit_type的1)。

  如何分辨出來呢?

  需要進入到slice層利用熵編碼資料來判斷,本工具主要針對該問題而設計的。

  下面是編譯後執行結果片段:

&n