Joã*_*ves 6 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;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我使用opencv直接从H264(profile1)编码的流中读取,但这会产生同样的问题,这里报告http://answers.opencv.org/question/34012/ip-camera-h264-error -while-decoding / 正如上一个问题中所建议的,我试图在opencv安装中禁用FFMPEG支持,这解决了h264解码错误但引发了其他问题.当使用opencv访问流时,由gstreame支持,总是会有很大的延迟.有了这个解决方案,我实现了15 FPS,但我有5秒的延迟,考虑到我需要一个实时应用,这是不可接受的.
解决方案2:从http地址读取帧,而(true){startTime = System.currentTimeMillis();
URL url = new URL("h t t p://[IP]/-wvhttp-01-/image.cgi");
URLConnection con = url.openConnection();
BufferedImage image = ImageIO.read(con.getInputStream());
showImage(image);
estimatedTime=System.currentTimeMillis()-startTime;
System.out.println(estimatedTime);
Thread.sleep(5);
}
Run Code Online (Sandbox Code Playgroud)
此策略只是从相机提供的URL中抓取帧.代码是用Java编写的,但是在C++中使用curl库的结果是相同的.这种解决方案避免了但是它需要很少超过100毫秒抓住每个帧,这意味着我只能平均10 FPS实现第一溶液的延迟.
我想知道如何使用c ++或用c ++开发的其他库来阅读视频?
小智 5
我遇到类似的问题,并认为我已经解决了一些使用libVLC与OpenCV的问题.FFMPEG似乎没有正确解码H264的问题,加上新版本(2.4.11)似乎已经为FFMPEG进行了TCP修复.无论如何,我在Windows 7和8.1上使用MS Visual Studio.
详情请见:http://answers.opencv.org/question/65932
就我个人而言,我建议您使用 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
Run Code Online (Sandbox Code Playgroud)
如果 test.mp4 可以成功播放,那么您将 ffmpeg 库集成到您的项目中绝对可以。
祝你好运!