我正在使用CV::VideoCapture
从IP摄像头捕获帧。它大部分时间都有效,但有时会报告错误:
[mjpeg @ 0x233aea0] overread 8
当这个错误发生时,我的程序就卡在那里了。 This可以解释原因。但是如何在C ++代码中解决它? OpenCV可以在不终止程序的情况下处理此错误吗?
P.S。我发现如果我没有立即调用CV::VideoCapture::read()
,但等待一段时间,比如CV::VideoCapture::open()
之后的60秒,则每次都会发生此错误!这是OpenCV的错误吗?
#include <unistd.h>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
int main(int argc, char* argv[]) {
// argv[1] is a valid url, like "http://xxxx/mjpg/video.mjpg"
cv::VideoCapture cap(argv[1]);
if (!cap.isOpened()) {
std::cout << "Cannot Open Camera!" << std::endl;
return -1;
}
// The error occures if I pause for a while.
// But it is okay when I capture frames from video files intead of IP camera.
sleep(60);
while (static_cast<char>(cv::waitKey(1)) != 'q') {
cv::Mat frame;
cap >> frame;
if (frame.empty()) break;
cv::imshow("frame", frame);
}
}
答案 0 :(得分:1)
我无法解释原因,但使用地址System.setProperty("oracle.net.tns_admin", PATH_TO_TNSNAMES.ORA);
Class.forName ("oracle.jdbc.OracleDriver");
dbUrl = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+IPHOST+")(PORT="+PORT+"))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME="+DBNAME+")))"
conn = DriverManager.getConnection(dbUrl, USERNAME, PASSWORD);
代替http://xxxx/axis-cgi/mjpg/video.cgi
解决了问题!谁能在这里提供一些很好的解释,或者一些链接?谢谢!