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標準文件中都有介紹