【问题标题】:GStreamer in OpenCV does not send video data over UDPOpenCV 中的 GStreamer 不通过 UDP 发送视频数据
【发布时间】:2018-05-23 12:11:59
【问题描述】:

我正在尝试在 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 或 GS​​treamer 本身有问题,因为我可以在通过打开编写器时将视频流式传输到 OpenCV 中的 autovideosink

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

供参考 - 我通过 Brew 安装了 GStreamer,并使用以下 CMake 标志自己构建了 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找到了一点信息。打开编写器时,我得到:没有这样的元素工厂“x264enc”所以似乎 x264enc 不能通过 OpenCV 获得,但它是通过 GStreamer API 获得的。为什么会这样?

标签: c++ macos opencv video gstreamer


【解决方案1】:

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

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

通过 brew (brew install gst-plugins-ugly --with-x264) 为 GStreamer 重新安装 x264enc 元素解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    相关资源
    最近更新 更多