2012-07-24 147 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