花了兩天時間做了個h264裸流nal類型和frame類型檢測的工具,已上傳至github,有需要的自行下載(其中包含構建出來的可執行文件exe)。
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層利用熵編碼數據來判斷,本工具主要針對該問題而設計的。
下面是編譯后執行結果片段: