我正尝试在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应用编程接口从(c++)源代码编译或通过启动时,相同的管道也可以工作
/gst-launch-1.0 videotestsrc ! x264enc byte-stream=true threads=4 ! mpegtsmux ! udpsink host=localhost port=9999我不认为OpenCV或GStreamer本身有错,因为当我通过以下方式打开writer时,我能够将视频流到OpenCV中的自动视频链接
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比较陌生,所以我可能遗漏了一些明显的东西。你知道我在这里可能做错了什么吗?或者有什么方法可以帮助追踪这个问题?
发布于 2017-12-10 03:15:58
终于明白了。通过设置GStreamer打开GST_DEBUG=2调试输出时,OpenCV找不到x264enc。我没有注意到这一点,因为它是在通过GStreamer C++ API编译管道时发现的。
原因是,虽然OSX上的GStreamer安装包安装了x264enc元素,但mac上的brew没有。我自己编译了OpenCV -它使用的是GStreamer的brew安装,而不是框架。
已通过brew重新安装用于GStreamer的插件元素(brew安装gst-plugins-- x264enc --with-x264),解决了此问题。
https://stackoverflow.com/questions/47728061
复制相似问题