我通過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:P幀插值
- 2. 從I幀/ P幀片段創建MDAT
- 3. 如何找到幀類型(i幀,p幀,b幀)?
- 4. 什麼是H 264編解碼器中i幀的起始碼?
- 5. 確定RTP流中H.264 I幀的末端
- 6. 基於I幀生成P幀
- 7. H.264 over RTP - 識別SPS和PPS幀
- 8. 將H.264 I幀放到AVSampleBufferDisplayLayer中,但沒有顯示視頻圖像
- 9. Android I /編舞:跳過了xxx幀
- 10. 如何從H.264幀和音頻幀的集合中創建mp4文件?
- 11. (i)幀中的命名錨不跳到
- 12. 如何從h.264視頻流獲取幀速率?
- 13. 如何在android中捕獲H.264編碼幀?
- 14. 如何獲得H.264幀的DTS和PTS?
- 15. 如何在h264中找到任何I/B/P幀?
- 16. 如何訪問一個I幀
- 17. VTCompressionSession跳過第一幀
- 18. Qt QTimeLine跳過第一幀
- 19. AVAssetReader在H.264.mov文件中的一幀後失敗
- 20. 平臺遊戲。跳轉到下一幀
- 21. 識別並修改H264 I,P,B幀
- 22. 跳過181幀... Android
- 23. Android MediaMetadataRetriever.getFrameAtTime跳過幀
- 24. 跳過第一個關鍵幀動畫
- 25. glGetError()不工作,直到下一幀
- 26. 在編碼時強制自定義H.264內部幀(關鍵幀)?
- 27. 跳轉到AS3中的下一個或上一個關鍵幀
- 28. 顯示I幀
- 29. AngularJs與i幀
- 30. Jquery.text()和I幀