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

C++ suddenly blocks on reading a frame from IP camera using VideoCapture

本文关键字:IP 摄像机 读取 VideoCapture 突然 C++      更新时间:2023-10-16

我使用的是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
    } 
}

视频流在某个时刻被卡住,用之前的所有选项抓取一帧,每个选项都会阻止,但不会退出或返回任何错误。

你知道是否有办法处理或解决这个问题吗?也许是一些验证、try/catch或计时器?

此问题通过此合并解决,但意外的是opencv_ffmpeg.dll尚未发布。

您可以在这里找到更新的opencvffmpeg.dll和测试。