目前,我正在尝试使用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 ++开发的其他库来阅读视频?