Opencv 从IP摄像机读取h264流

Opencv 从IP摄像机读取h264流,opencv,ffmpeg,h.264,ip-camera,Opencv,Ffmpeg,H.264,Ip Camera,目前,我正在尝试使用opencv阅读佳能VB-H710F相机的视频 为此,我尝试了两种不同的解决方案: 解决方案1:从rtsp地址读取流 VideoCapture cam ("rtsp://root:camera@10.0.4.127/stream/profile1=u"); while(true) cam >> frame; 在本例中,我使用opencv直接从H264(profile1)中编码的流中读取数据,但是这会产生这里报告的相同问题 正如前一个问题中所建议的,我尝

目前,我正在尝试使用opencv阅读佳能VB-H710F相机的视频

为此,我尝试了两种不同的解决方案:

解决方案1:从rtsp地址读取流

 VideoCapture cam ("rtsp://root:camera@10.0.4.127/stream/profile1=u");

 while(true)
  cam >> frame;
在本例中,我使用opencv直接从H264(profile1)中编码的流中读取数据,但是这会产生这里报告的相同问题 正如前一个问题中所建议的,我尝试在opencv安装中禁用FFMPEG支持,这解决了h264解码错误,但引发了其他问题。 当使用gstreame支持的opencv访问流时,总是会有很大的延迟。 使用此解决方案,我实现了15 FPS,但我有5秒的延迟,这是不可接受的,因为我需要一个实时应用程序

解决方案2:从http地址读取帧 while(true) { startTime=System.currentTimeMillis()

这个策略简单地从摄像机提供的URL抓取框架。代码在爪哇,但是C++中的结果与CURL库是相同的。 这个解决方案避免了第一个解决方案的延迟,但是抓取每个帧只需要100 ms多一点,这意味着我只能实现平均10 FPS


<>我想知道如何用C++或C++开发的另一个库来阅读视频?

< P>个人,我建议你用FFMPEG来读取IP摄像机的RTSP流,然后用OpenCV从FFMPEG解码的缓冲区读取。FFMPEG对H.264解码有很好的优化,性能不应该是一个关键问题。 您可以使用ffmpeg二进制文件来验证这是否可以正常工作:

ffmpeg -i "rtsp://root:camera@10.0.4.127/stream/profile1=u" -vcodec copy -acodec none test.mp4
如果test.mp4能够成功播放,那么将ffmpeg LIB集成到您的项目中是完全可以的


祝你好运!

你也可以使用ffmpeg处理每个帧。你需要根据自己的要求创建自己的过滤器。

我也遇到过类似的问题,我想我已经解决了使用OpenCV的libVLC的一些问题。ffmpeg似乎存在无法正确解码H264以及更新版本(2.4.11)的问题似乎已经有了FFMPEG的TCP补丁。无论如何,我在Windows7和8.1上使用了微软的Visual Studio


此处提供了详细信息:

感谢您的回答。尽管能够以15 fps的速度成功录制视频,但此解决方案不符合我的目的,因为在您的示例中,ffmpeg只是将视频复制到一个文件中而没有解码,在我的情况下,我需要实时解码。是的,我知道您需要提取帧并进行处理每个帧上的g。ffmpeg示例用于测试输入信号是否正确处理以及是否可以使用ffmpeg正确处理。经过验证,您现在可以开始编译ffmpeg库,并使用ffmpeg lib使用代码手动解码帧,并且在解码过程中帧数据将对您可用管道。互联网上有各种ffmpeg开发手册。我已经尝试过了,但问题仍然存在,因为我过去只能访问2秒的帧(我认为这与ffmpeg的缓冲区大小有关)。您知道如何在保持实时解码的同时减小缓冲区的大小吗?我已经搜索了web,但找不到任何解决方案。再次感谢您
ffmpeg -i "rtsp://root:camera@10.0.4.127/stream/profile1=u" -vcodec copy -acodec none test.mp4