如何使用opencv从Android IPWebcam获取MJPG流视频

时间:2011-09-01 04:54:31

标签: android c++ opencv video-streaming

我在Android上使用IP网络摄像头程序,并通过WiFi在我的电脑上接收它。我想要的是在Visual Studio,C ++中使用opencv来获取该视频流,可以通过以下URL获取MJPG流:http://MyIP:port/videofeed 如何使用opencv获取它?

5 个答案:

答案 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

中描述