这是我对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;
}
...
可能有什么问题?
答案 0 :(得分:0)
您是否尝试使用Videocapture在计算机中打开视频文件? (只需将视频文件的路径添加到您放置URL的位置)我假设它以相同的方式失败。 所以这是ffmpeg的一个问题。您需要使用ffmpeg支持自己构建OpenCV。 (也可以对gstreamer进行一些搜索。我对此并不熟悉。)
您也可以尝试在中间使用其他软件,例如ManyCam。它使您能够以与从网络摄像头阅读相同的方式轻松读取流。