1. 程式人生 > >ts找 H264 I幀的完整性

ts找 H264 I幀的完整性

一個mpeg2 ts流封裝的h264視訊流,怎麼區分這個ts流中i, p, b幀起始位置,以及幀長?
能從ts流中提取每個I幀,並且能識別I幀是否完整

初步想法:
1、找幀起始位置所在的ts包
找視訊PID包,其中 Packet_start_code_prefix==0x000001 && stream_id==0xE0
2、判別幀型別
在這個PES視訊包負載中 找nal起始標誌 0x000001
找到後,然後獲取Nal_unit_type
Nal_unit_type等於5為IDR幀(在網上查詢IDR幀屬於I幀的子集),怎麼判別I,P, B幀

後面不知道怎麼弄了,知識有限啊,請高手指點

 

------------------------------------------------------------------------------------------------------

有H264編碼規範文件的,按照文件裡的內容來解析NAL單元就知道了

------------------------------------------------------------------------------------------------------

H264沒有幀的概念,I,P,B  slice

------------------------------------------------------------------------------------------------------

沒有I,P,B幀,有I,P,B slice
但是關鍵幀總該有吧。比如IDR幀應該是關鍵幀吧。


好像IDR幀後面緊接著就是序列引數集,然後是影象引數集,然後就是4個 I slice

能不能知道這個IDR幀的終止位置,並且有方法能確保這個IDR幀是完整的,證明在傳輸過程中沒有丟包出現?

------------------------------------------------------------------------------------------------------

自頂一下,找I幀,驗證完整性

-----------------------------------------------------------------------------------------------------

IPB幀(slice)是可以找到的,但完整性是無法驗證的。要參考H264標準文件,先查詢 00 00 00 01 xx,code = xx & 0x1f,當code=1或5時為幀頭,然後通過UExpGolomb方法計算first_mb_in_slice和slice_type,slice_type就是幀型別,

-----------------------------------------------------------------------------------------------------

me(v) 對映指數Golomb熵編碼

se(v) 有符號指數Golomb熵編碼
te(v)  截斷指數Golomb熵編碼
u(n)/u(v)  讀進連續的若干位元,並把他們解釋為無符號整數
ue(v)  無符號指數Golomb熵編碼

UExpGolomb 計算ue(v) 
ExpGolomb 計算se(v)

熵編碼計算有什麼資料可以參考麼?

-----------------------------------------------------------------------------------------------------

H264標準文件中都有介紹