OpenCV中的GStreamer不通过UDP发送视频数据

我试图在Mac(10.12.6)上使用GStreamer来流式传输通过UDP从OpenCV帧编码的视频。 出于某种原因,这不起作用,我没有从GStreamer或OpenCV获得任何错误输出。 这就是我如何在OpenCV中打开作者:

    cv::VideoWriter writer(
    "appsrc ! videoconvert ! x264enc byte-stream=true threads=4 ! mpegtsmux ! udpsink host=localhost port=9999",
    cv::CAP_GSTREAMER,
    0,
    (double) 5,
    cv::Size(320, 240),
    true);

这位作家打开并且我可以将帧提供给它,但是在侦听端口时我没有得到任何输出。 使用GStreamer API从(c ++)源编译或通过启动时,相同的管道工作

/gst-launch-1.0 videotestsrc ! x264enc byte-stream=true threads=4 ! mpegtsmux ! udpsink host=localhost port=9999

我不认为OpenCV或GStreamer本身存在问题,因为我可以通过OpenCV打开作者时将视频流式传输到OpenCV中的autovideosink

    cv::VideoWriter writer(
    "appsrc ! autovideosink",
    cv::CAP_GSTREAMER,
    0,
    (double) 5,
    cv::Size(320, 240),
    true);

作为参考 - 我通过Brew安装了GStreamer,并使用以下CMake Flags自己构建OpenCV:

-DOPENCV_ENABLE_NONFREE=ON
-DWITH_OPENGL=ON 
-DWITH_OPENVX=ON 
-DWITH_OPENCL=ON 
-DBUILD_PNG=ON 
-DBUILD_TIFF=ON 
-DOPENCV_EXTRA_MODULES_PATH=~/src/opencv_contrib/modules 
-DWITH_1394=OFF 
-DWITH_CUDA=OFF 
-DWITH_GSTREAMER=ON.

我对GStreamer比较陌生,所以我可能会错过一些明显的东西。 任何想法我在这里可能做错了什么或有什么可以帮助追查这个问题?


终于明白了。 通过设置GST_DEBUG = 2打开GStreamer调试输出,发现OpenCV未找到x264enc。 我没有注意到它是在通过GStreamer C ++ API编译管道时发现的。

原因是,尽管OSX上的GStreamer安装软件包安装了x264enc元素,但在mac上的brew没有。 自己编译OpenCV后 - 它使用GStreamer的brew安装而不是框架。

通过brew重新安装GStreamer的x264enc元素解决了这个问题(brew安装gst-plugins-丑陋--with-x264)。

链接地址: http://www.djcxy.com/p/25435.html

上一篇: GStreamer in OpenCV does not send video data over UDP

下一篇: Opening a GStreamer pipeline from OpenCV with VideoWriter