我在Android上使用IP网络摄像头程序,并通过WiFi在我的电脑上接收它。我想要的是在Visual Studio,C ++中使用opencv来获取该视频流,可以通过以下URL获取MJPG流:http://MyIP:port/videofeed 如何使用opencv获取它?
答案 0 :(得分:5)
老问题,但我希望这可以帮助某人(与my answer here相同)
OpenCV期望其VideoCapture参数的文件扩展名, 即使并不总是必要的(例如你的情况)。
你可以通过传入一个结尾的伪参数来“欺骗”它
mjpg
分机:
所以也许试试:
VideoCapture vc;
ipCam.open("http://MyIP:port/videofeed/?dummy=param.mjpg")
答案 1 :(得分:2)
安装IP Camera Adapter并将其配置为捕获视频流。然后安装ManyCam,您将在相机部分看到“MPEG Camera”。(如果您转到有关如何为Skype设置IPWebCam的链接,您将看到相同的说明) 现在,您可以像通过openCV的网络摄像头一样访问您的MJPG流。我尝试使用OpenCV 2.2 + QT并且效果很好。 认为这有帮助。
答案 2 :(得分:1)
我做了一个脏补丁,让openCV与android ipWebcam一起工作:
在文件OpenCV-2.3.1 / modules / highgui / src / cap_ffmpeg_impl.hpp
中在函数bool CvCapture_FFMPEG :: open(const char * _filename)
取代:
int err = av_open_input_file(&ic, _filename, NULL, 0, NULL);
通过
AVInputFormat* iformat = av_find_input_format("mjpeg");
int err = av_open_input_file(&ic, _filename, iformat, 0, NULL);
ic->iformat = iformat;
并发表评论:
err = av_seek_frame(ic, video_stream, 10, 0);
if (err < 0)
{
filename=(char*)malloc(strlen(_filename)+1);
strcpy(filename, _filename);
// reopen videofile to 'seek' back to first frame
reopen();
}
else
{
// seek seems to work, so we don't need the filename,
// but we still need to seek back to filestart
filename=NULL;
int64_t ts = video_st->first_dts;
int flags = AVSEEK_FLAG_FRAME | AVSEEK_FLAG_BACKWARD;
av_seek_frame(ic, video_stream, ts, flags);
}
那应该有用。希望它有所帮助。
答案 3 :(得分:1)
这是解决方案(即时通讯在Android上使用IP网络摄像头):
CvCapture* capture = 0;
capture = cvCaptureFromFile("http://IP:Port/videofeed?dummy=param.mjpg");
我无法发表评论,所以即时发布新帖子。在原始答案是一个错误 - 使用/之前的假。 THX解决方案。
答案 4 :(得分:0)
我的工作示例
// OpenCVTest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
/**
* @function main
*/
int main( int argc, const char** argv )
{
CvCapture* capture;
IplImage* frame = 0;
while (true)
{
//Read the video stream
capture = cvCaptureFromFile("http://192.168.1.129:8080/webcam.mjpeg");
frame = cvQueryFrame( capture );
// create a window to display detected faces
cvNamedWindow("Sample Program", CV_WINDOW_AUTOSIZE);
// display face detections
cvShowImage("Sample Program", frame);
int c = cvWaitKey(10);
if( (char)c == 27 ) { exit(0); }
}
// clean up and release resources
cvReleaseImage(&frame);
return 0;
}
使用vlc从网络摄像头播放mjpeg,如何在http://tumblr.martinml.com/post/2108887785/how-to-broadcast-a-mjpeg-stream-from-your-webcam-with
中描述