OpenCV VideoWriter可以支持将帧写入RTSP吗?

时间:2017-10-26 08:48:36

标签: c++ opencv ffmpeg video-streaming

我正在使用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)

1 个答案:

答案 0 :(得分:3)

使用GStreamer可以实现。 Opencv捕获主要使用FFMPEG,GStreamer。您可以同时捕获流。您也可以同时使用WideoWriter。 FFMPEG只能用于生成视频文件。 Gstreamer可用于通过视频流在c ++ OpenCV程序外部流式传输结果。

GStreamer可用于Visual Studio 2019,并且适用于opencv 4.2。在Linux上安装更加容易。

这很容易,但是有很多出错的地方。 Gstreamer管道工程。 Tutorial在此处提供了安装的扩展说明。

Gstreamer result

我用过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开发安装程序 what to download 从源代码和OpenCV安装生成OpenCV时,通常遵循以下步骤。此外,在cmake配置期间需要添加这些资源。
Gstreamer Cmake opencv config

现在在Visual Studio 2019中构建由CMAKE生成的OpenCV项目。最后一个重要的事情是设置环境变量以查找GStreamer运行时。进入系统变量路径:添加

  • xxx \ 1.0 \ x86_64 \ bin
  • xxx \ 1.0 \ x86_64 \ lib
  • xxx \ 1.0 \ x86_64 \ lib \ gstreamer-1.0 Environmental variables

您需要将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);