无法打开HTTP流:打开文件时出错(../cap_ffmpeg_impl.hpp:529)

时间:2013-11-07 11:00:06

标签: c++ opencv video-streaming

这是我对HTTP流的链接格式(用户,密码和地址已更改为虚拟):

http://username:password@192.168.0.104:8093/axis-cgi/mjpg/video.cgi

此流可在 VLC 中完美运行。但是,我无法使用OpenCV库打开它。

这是我的代码:

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main()
{
    VideoCapture cap;
    const string videoStreamAddress = "http://username:password@192.168.0.104:8093/axis-cgi/mjpg/video.cgi";
    cap.open(videoStreamAddress);
    if (!cap.isOpened())
    {
        cout << endl << "Videostream not found !" << endl;
        system("pause");
        return 0;
    }

    Mat frame;

    while(1)
    {
        cap >> frame;
        if (frame.empty())
            break;

        imshow("IPcamera", frame);

        int c = waitKey(1);
        if (c == 27)
        {
            break;
        }
    }

    waitKey(0);
    return 0;
}

这给了我一个错误:

warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:529)

指向:

bool CvCapture_FFMPEG::open( const char* _filename )
{
    unsigned i;
    bool valid = false;

    close();

#if LIBAVFORMAT_BUILD >= CALC_FFMPEG_VERSION(52, 111, 0)
    int err = avformat_open_input(&ic, _filename, NULL, NULL);
#else
    int err = av_open_input_file(&ic, _filename, NULL, 0, NULL);
#endif

    if (err < 0)
    {
        CV_WARN("Error opening file");
        goto exit_func;
    }
...

可能有什么问题?

1 个答案:

答案 0 :(得分:0)

您是否尝试使用Videocapture在计算机中打开视频文件? (只需将视频文件的路径添加到您放置URL的位置)我假设它以相同的方式失败。 所以这是ffmpeg的一个问题。您需要使用ffmpeg支持自己构建OpenCV。 (也可以对gstreamer进行一些搜索。我对此并不熟悉。)

您也可以尝试在中间使用其他软件,例如ManyCam。它使您能够以与从网络摄像头阅读相同的方式轻松读取流。