2

这是我到 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;
    }
...

可能是什么问题?

4

1 回答 1

0

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

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

于 2013-11-14T11:39:43.890 回答