我正在使用OpenCV和IP摄像头,我可以使用RTSP协议成功读取视频流,如下所示:
VideoCapture capture = new VideoCapture();
String url = "rtsp://admin:123456@192.168.10.3:554/Streaming/Channels/101?transportmode=unicast";
capture.open(url);
但是现在我想以同样的方式创建一个带有VideoWriter
的编写器并将帧写入输出流。
这可能吗?如果是,那怎么样?如何为流创建文件名以及如何从另一端获取流,从IP摄像头到OpenCV也是如此?
open(String filename, int fourcc, double fps, Size frameSize, boolean isColor)
答案 0 :(得分:3)
使用GStreamer可以实现。 Opencv捕获主要使用FFMPEG,GStreamer。您可以同时捕获流。您也可以同时使用WideoWriter。 FFMPEG只能用于生成视频文件。 Gstreamer可用于通过视频流在c ++ OpenCV程序外部流式传输结果。
GStreamer可用于Visual Studio 2019,并且适用于opencv 4.2。在Linux上安装更加容易。
这很容易,但是有很多出错的地方。 Gstreamer管道工程。 Tutorial在此处提供了安装的扩展说明。
我用过3)
-OpenCV源代码opencv-4.2.0
-OpenCV源代码opencv_contrib-4.2.0
-Cmake 3.17发布候选3,这很重要。
我将开发和运行时安装程序用于MSVC GStreamer
Gstreamer 1.16.2运行时安装程序
Gstreamer 1.16.2开发安装程序
从源代码和OpenCV安装生成OpenCV时,通常遵循以下步骤。此外,在cmake配置期间需要添加这些资源。
现在在Visual Studio 2019中构建由CMAKE生成的OpenCV项目。最后一个重要的事情是设置环境变量以查找GStreamer运行时。进入系统变量路径:添加
您需要将VideoWriter与gstreamer Pipeline一起使用。
VideoWriter writer( "appsrc ! videoconvert ! videoscale ! video/x-raw,width=320,height=240 ! theoraenc ! oggmux ! tcpserversink host=192.168.0.116 port=8080 recover-policy=keyframe sync-method=latest-keyframe unit-format=buffers units-max=1 buffers-max=0 sync=true ",
0,
5,
Size(320, 240),
true);