C++ OpenCV - 如何捕获 rtsp 视频流

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21041370/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-27 23:26:48  来源:igfitidea点击:

OpenCV - how to capture rtsp video stream

c++opencvvideostreamrtsp

提问by Niedved

for example we have working rtsp stream test like: "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov" (it works in moment of publishing this post)

例如,我们有工作 rtsp 流测试,如:“rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov”(它在发布这篇文章时起作用)

Now I want to catch this video stream in openCV (opencv 2.4.7 / 2.4.8) I've my code works perfectly on local movie files but when I try to capture rtsp I get msgs like: "Couldn't read movie file rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov"

现在我想在 openCV (opencv 2.4.7 / 2.4.8) 中捕获这个视频流我的代码在本地电影文件上运行良好,但是当我尝试捕获 rtsp 时,我收到如下消息:“无法读取电影文件rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov"

I've tried few different ways like:

我尝试了几种不同的方法,例如:

CvCapture *camera = cvCreateFileCapture("rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov"); 
if (camera == NULL) {
 printf("video is null, aborting...");
 return -1;
}
else{ 
 printf("video ok");
}

or:

或者:

cv::VideoCapture vcap;
//open the video stream and make sure it's opened
if(!vcap.open("rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov")) {
    std::cout << "Error opening video stream or file" << std::endl;
    return -1;
}

Any idea ?

任何的想法 ?

--

——

Niedved

尼德韦

采纳答案by Murat ?eker

The following code works for me without any problem. If you have a username and password for the stream, do not forget to include it in the url address.

以下代码对我有用,没有任何问题。如果您有流的用户名和密码,请不要忘记将其包含在 url 地址中。

cv::VideoCapture capture(url);

if (!capture->isOpened()) {
    //Error
}

cv::namedWindow("TEST", CV_WINDOW_AUTOSIZE);

cv::Mat frame;

while(m_enable) {
    if (!capture->read(frame)) {
        //Error
    }
    cv::imshow("TEST", frame);

    cv::waitKey(30);
}