C ++突然阻止使用VideoCapture从IP摄像头读取帧

时间:2016-04-20 17:10:05

标签: c++ opencv frame video-capture ip-camera

我正在使用OpenCV 3.如果摄像机与网络断开连接或帧出现问题,使用带有IP摄像机的VideoCapture抓取帧会阻塞。 我首先检查是否videoCapture.isOpened()。如果是,我尝试了这些方法,但似乎没有任何效果:

1)抓取器>>帧

if(grabber.isOpened()) {
    grabber >> frame; 
    // DO SOMETHING WITH FRAME
}

2)阅读

if(grabber.isOpened()) {
    if(!grabber.grab()){
      cout << "failed to grab from camera" << endl;
    } else {
      if (grabber.retrieve(frame,0) ){
        // DO SOMETHING WITH FRAME
      } else {
        // SHOW ERROR
      }
    }
}

3)抓取/检索

if(grabber.isOpened()) {
    if ( !grabber.read(frame) ) {
      cout << "Unable to retrieve frame from video stream." << endl;
    }
    else {
     // DO SOMETHING WITH FRAME
    } 
}

视频流在某个时刻卡住了一个包含所有先前选项的帧,每个选项都阻止但不退出或返回任何错误。

您知道是否有办法处理或解决这个问题?也许一些验证,尝试/捕捉或计时器?

1 个答案:

答案 0 :(得分:2)

此问题已由this merge解决,但不幸的是opencv_ffmpeg.dll尚未发布。

你可以找到here更新的opencv_ffmpeg.dll并测试。