You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV C++读取RTSP流时VideoCapture报Operation now in progress错误

问题解决方案

核心错误根因

你当前的代码首先存在环境变量参数格式错误:OPENCV_FFMPEG_CAPTURE_OPTIONS的键值对需要用=连接,不同参数之间才用;分隔,你原来写的rtsp_transport;udp属于无效配置,没有正确指定RTSP传输协议,导致FFMPEG后端握手超时失败。

分步解决方法

  • 第一步:修正环境变量参数格式,优先测试TCP传输(UDP传输容易在局域网出现丢包、摄像头侧不兼容的问题,VLC/ffplay默认优先用TCP协商),修改为:
    setenv("OPENCV_FFMPEG_CAPTURE_OPTIONS", "rtsp_transport=tcp", 1);
    
  • 第二步:OpenCV的VideoCapture::open默认超时时间较短,可添加3~5次的重试逻辑,避免单次握手失败直接退出
  • 第三步:如果上述修改仍无效,确认你的OpenCV版本:
    • 3.x版本的FFMPEG后端对RTSP的支持存在大量已知bug,建议升级到4.5及以上的稳定版本
    • 确认你编译OpenCV时开启了FFMPEG模块,且链接的FFMPEG库版本和你系统中可正常播放流的ffplay版本一致
  • 补充说明:删除cv::CAP_FFMPEG参数报错是正常现象,OpenCV原生后端不支持RTSP协议解析,必须指定FFMPEG作为后端才能拉取RTSP流

修改后可运行的代码示例

#include <iostream>
#include <unistd.h>
#include <opencv2/opencv.hpp>

int main()
{
    std::string window_name = "RGB Camera";
    // 修正参数格式,使用TCP传输避免丢包/握手失败
    setenv("OPENCV_FFMPEG_CAPTURE_OPTIONS", "rtsp_transport=tcp", 1);

    const std::string rtsp_url = "rtsp://192.168.2.100:5010/video.sdp";

    cv::VideoCapture cap;
    int retry_cnt = 0;
    const int max_retry = 3;
    // 添加重试逻辑
    while (retry_cnt < max_retry) {
        if (cap.open(rtsp_url, cv::CAP_FFMPEG)) {
            break;
        }
        std::cerr << "Open stream failed, retry " << retry_cnt + 1 << "/" << max_retry << std::endl;
        retry_cnt++;
        sleep(1);
        cap.release();
    }

    if (!cap.isOpened())
    {
        perror("Final Video Stream Error");
        exit(EXIT_FAILURE);
    }

    cv::namedWindow(window_name, cv::WindowFlags::WINDOW_KEEPRATIO);
    cv::Mat frame;

    while (1)
    {
        const bool read_success = cap.read(frame);

        if (!read_success)
        {
            printf("End of stream\n.");
            break;
        }

        cv::imshow(window_name, frame);

        char c = (char)cv::waitKey(25);

        if (c == 27)
        {
            printf("Esc key pressed, terminating loop...\n");
            break;
        }
    }

    cap.release();
    cv::destroyAllWindows();
    return 0;
}

内容的提问来源于stack exchange,提问作者John Hal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:33:00