opencv获取RTMP/RTSP视频流数据 并 显示或者进行进一步处理

临时接到这个需求,比较陌生,搜了很多资料,比如 libRTMP, rtmpdump等工具,最后发现原来 opencv的 VideoCapture 可以直接打开 RTMP视频流。

但是 直接去官网下载的 dll 却不行,看了下 VideoCapture 的构造函数,第二个入参有很多可选项,其中一个是 CAP_FFMPEG, 于是 把 OpenCV重新编译了下, 带上FFMPEG选项, 这下就成功了!非常简洁!

测试代码如下

void rtmpTest() {
	string source = "rtmp://58.200.131.2:1935/livetv/hunantv";
	//string source = "test.flv";
	VideoCapture inputVideo(source, CAP_FFMPEG);              // Open input

	if (!inputVideo.isOpened())
	{
		cout << "Could not open the input video: " << source << endl;
		return ;
	}

	int cnt = 0;

	while (1)
	{
		Mat frame;

		// Capture frame-by-frame 
		inputVideo >> frame;
		cnt++;
		std::cout << cnt << std::endl;

		// If the frame is empty, break immediately
		if (frame.empty())
			break;
		imshow("Frame", frame);

		// Press  ESC on keyboard to  exit
		char c = (char)waitKey(1);
		if (c == 27)
			break;
	}

	inputVideo.release();

}

实测发现 RTSP 的视频流也是可以的

你可能感兴趣的:(数字图像处理,Tools,C++,opencv,ffmpeg,c++)