【发布时间】: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 或 GStreamer 本身有问题,因为我可以在通过打开编写器时将视频流式传输到 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