我通過RTP/UDP接收h.264流(基線配置文件), 並將它們發送給解碼器時,如果發生(P)幀丟失,我想跳過直到下一幀收到幀。 如何檢測幀丟失? H.264規範太困惑了。 任何建議將受到歡迎。如何跳過h.264 P幀直到下一個I幀
2
A
回答
1
我的第一直覺是你的解碼器應該能夠從丟失的P幀中恢復,但如果你的解碼庫不能...
我的第一個猜測將是slice_header的領域的frame_num() 。
slice_header的語法記錄在ISO 14496-10的7.3.3節中。
frame_num的定義從我的副本的第88頁開始,繼續進行大約一頁(因此,如果要處理全部視頻,解釋它並不是微不足道的)。
在掃描文檔其餘部分對frame_num的引用時,我還注意到有一個gaps_in_frame_num_value_allowed_flag(在SPS中,第7.3.2.1節),使frame_num在一般情況下變得複雜。
2
從切片報頭中,使用的frame_num(解碼順序)參數以及所述TopFieldPictureCount和BottomFieldPictureCount。後兩者統稱爲圖片訂購數量(POC)。 POC確定顯示順序。
假設您的GOP的顯示順序如下:IBBPBBPBBP ...這將是您的POC參數的順序。相應的解碼順序將爲IPBBPBBPBB ...注意,您需要解碼第一個I和P以解碼前2個B幀。同樣,您需要解碼第二個P幀,以便(連同第一個P幀)解碼第二個2個B幀。因此,我將使用POC參數來確保我的幀已被正確解碼。如果事先知道你的GOP,你可以使用上面的GOP來確保你正在接收幀3,6,9等,其中I幀是0幀。如果GOP是未知的,你解碼一個幾幀,並從POC模式確定GOP。例如,上述GOP將具有0,3,1,2,6,4,5,9,7,8,...的實時POC。或者,片頭可精確地告訴你什麼幀你正在處理。
0
翻閱RTP標題。 Wireshark「解碼爲...」RTP功能對此非常有用。較長的幀是I幀,較短的幀是P幀或B幀。
相關問題
- 1. 確定RTP流中H.264 I幀的末端
- 2. 什麼是H 264編解碼器中i幀的起始碼?
- 3. 基於I幀生成P幀
- 4. H.264 over RTP - 識別SPS和PPS幀
- 5. 將H.264 I幀放到AVSampleBufferDisplayLayer中,但沒有顯示視頻圖像
- 6. (i)幀中的命名錨不跳到
- 7. 如何從h.264視頻流獲取幀速率?
- 8. 如何在android中捕獲H.264編碼幀?
- 9. 如何訪問一個I幀
- 10. VTCompressionSession跳過第一幀
- 11. Qt QTimeLine跳過第一幀
- 12. 平臺遊戲。跳轉到下一幀
- 13. 識別並修改H264 I,P,B幀
- 14. 跳過181幀... Android
- 15. 顯示I幀
- 16. h.264字節流解析
- 17. jQuery nextAll() - 點擊h元素切換所有p元素,直到下一個h
- 18. H.264解碼無法解析異常幀頭
- 19. Android:視頻編碼H.264和設置幀率不工作
- 20. 使用TCP上的RTSP傳輸h.264幀的附加數據
- 21. H.264視頻幀數據轉換爲UIImage
- 22. 在MPEG2傳輸流中封裝H.264流可變幀率
- 23. H.264視頻編碼
- 24. I幀與jQuery
- 25. 調用I幀
- 26. 如何獲取視頻文件的I/P/B幀數量?
- 27. AVSampleBufferDisplayLayer如何顯示H.264
- 28. 如何修改H.264標頭,以便解碼器將爲某些幀重複以前的編碼幀?
- 29. 如何從h.264 AAC樣品在mp4中創建flv視頻幀
- 30. 如何在C/C++中使用x264將位圖作爲幀寫入H.264?