CV :: VideoCapture :: open()中的错误?

时间:2015-12-11 13:49:22

标签: c++ opencv ffmpeg

我正在使用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);
  }
}

1 个答案:

答案 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解决了问题!谁能在这里提供一些很好的解释,或者一些链接?谢谢!