我在 Windows 7 上使用 OpenCV 2.4.5 来捕获 RTSP 流。但我在两者之间得到了一些损坏的图像。我发现错误是在 ffmpeg 层中解码。我想删除这些损坏的帧。但我不能这样做是因为 opencv Mat::empty 永远不会返回 true。这可能是什么根本原因,请让我知道相同的解决方案。
这是供参考的图像:
解决此问题的一种方法可能是强制 RTSP 协议使用 TCP 作为传输。您可以附加?tcp
到您的 URL,例如rtsp://ip-address:port/xyz?tcp
然后将其传递给 open 方法。
这个解决方案对我有用,我尝试过使用 Axis、D-Link、Acti 和 Panasonic。
我正在使用 2.4.6 并且没有这样的框架。然而,众所周知,ffmpeg 在解析 h264 帧时存在问题。寻找 ffmpeg h264 解析器补丁或类似的。使用补丁构建 ffmpeg 并在您的项目中使用它应该可以解决它。