2012-07-24 165 views
8

我使用來自OpenCV的VideoCapture(使用ffmpeg支持編譯)從IP攝像頭傳輸H264內容。如何處理cv :: VideoCapture解碼錯誤?

到目前爲止事情好的工作,但每過一段時間,我得到的解碼錯誤(從ffmpeg的我相信):

[h264 @ 0x103006400] mb_type 137 in I slice too large at 26 10 
[h264 @ 0x103006400] error while decoding MB 26 10 
[h264 @ 0x103006400] negative number of zero coeffs at 25 5 
[h264 @ 0x103006400] error while decoding MB 25 5 
[h264 @ 0x103006400] cbp too large (421) at 35 13 
[h264 @ 0x103006400] error while decoding MB 35 13 
[h264 @ 0x103006400] mb_type 121 in P slice too large at 20 3 
[h264 @ 0x103006400] error decoding MB 20 3 

這些消息在控制檯中顯示出來。有沒有乾淨的方法來聽這些?我想跳過處理錯誤的幀。

任何提示/提示?

+0

面臨同樣的問題....任何解決方案??? – tod 2015-10-26 17:48:29

回答

3

最近我已經解決了同樣的問題,並嘗試解釋我遵循的步驟。

我更新最新opencv_ffmpeg.dll(我改名opencv_ffmpeg.dll到opencv_ffmpeg310.dll與3.1 OpenCV的使用,也這樣做,一個基本的拍攝改名爲同一個DLL opencv_ffmpeg2412.dll與OpenCV的2.4.12

使用幀和顯示成功沒有問題。但仍然是相同的問題,如果我做一些圖像處理或檢測造成捕捉幀之間的延遲。

解決第二個問題,我用一個線程連續抓幀並更新全球Mat用於處理。

here 你可以找到我的測試代碼(它需要像使用互斥和鎖內存一些改進時更新MAT)

我希望這些信息將是(我的英文不好對不起)有用

+0

我還沒有嘗試過,但它看起來比嘗試在錯誤消息中跳過並跳過幀更優雅。 – 2016-02-24 10:31:44

+0

最近我的方法在他的博客上由[Mare](http://study.marearts.com/2016/03/opencv-rtsp-receiving-test.html)解釋 – sturkmen 2016-03-26 23:14:28

0

我有同樣的問題。在我看來,這個問題來自這樣一個事實,即源於流的源比一個解碼更慢。可能對於解碼來說,你有一個無限循環的閱讀框架並對它們進行解碼,這可能比你的源碼可以發送給你更快。

我不知道如何停下來等到緩衝區已滿..我正在使用一個文件,以便我的相機源程序寫入一個文件,並且在解碼程序中從中讀取幀。到目前爲止,我還沒有能夠同步他們

+0

你是對的,我有一個無盡的循環,但沒有找到解決問題的辦法。我一直在考慮從opencv/ffmpeg輸出控制檯輸出,並且只在沒有遇到解碼錯誤時才使用幀,這是因爲hacky解決了問題,但還沒有實現,或者找到更優雅的解決方案 – 2014-06-24 11:30:31

+0

我曾經想過,但我不知道如何做到這一點..:/ – Nacho 2014-06-24 13:42:35