目前,我正在尝试使用opencv从我的佳能VB-H710F相机读取视频。为此,我尝试了两种不同的解决方案:
解决方案1:从rtsp地址读取流
在这种情况下,我正在使用opencv直接从H264编码流(profile1)中读取数据,但是出现了与此处报告的相同问题http://answers.opencv.org/question/34012/ip-camera-h264-error-while-decoding/。如前一个问题所建议的那样,我尝试在opencv安装中禁用FFMPEG支持,这解决了h264解码错误,但引发了其他问题。当通过gstreame使用opencv访问流时,总是会有很大的延迟。使用这种解决方案,我可以实现15 FPS,但有5秒钟的延迟,考虑到我需要实时应用程序,这是不可接受的。
解决方案1:从rtsp地址读取流
VideoCapture cam ("rtsp://root:camera@10.0.4.127/stream/profile1=u");
while(true)
cam >> frame;
在这种情况下,我正在使用opencv直接从H264编码流(profile1)中读取数据,但是出现了与此处报告的相同问题http://answers.opencv.org/question/34012/ip-camera-h264-error-while-decoding/。如前一个问题所建议的那样,我尝试在opencv安装中禁用FFMPEG支持,这解决了h264解码错误,但引发了其他问题。当通过gstreame使用opencv访问流时,总是会有很大的延迟。使用这种解决方案,我可以实现15 FPS,但有5秒钟的延迟,考虑到我需要实时应用程序,这是不可接受的。
解决方案2:从http地址读取帧 while(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);
}
这种策略只需从相机提供的url中获取帧。该代码使用Java编写,但使用curl库的C++结果相同。
此解决方案避免了第一种解决方案的延迟,但每个帧需要超过100毫秒,这意味着我只能平均实现10 FPS。
我想知道如何使用c++或另一个c++开发的库来读取视频?