为什么此GStreamer管道可用于filesink,但不适用于ximagesink / autovideosink?

时间:2019-12-01 06:44:54

标签: video-streaming gstreamer gstreamer-1.0

在我的Ubuntu系统上,我可以运行以下管道:

gst-launch-1.0 videotestsrc ! autovideosink

并以30fps的速度查看测试图案。

我还可以启动此管道:

gst-launch-1.0 -e -v rtspsrc 'location=...' ! decodebin ! avenc_mpeg4 ! mp4mux ! filesink location=test.mp4

...并且可以使用gst-play-1.0来毫无问题地查看test.mp4文件。

但是这两个管道不会打开视图窗口,而且在调试过程中不会出现任何错误:

gst-launch-1.0 -e -v rtspsrc 'location=...' ! decodebin ! ximagesink

gst-launch-1.0 -e -v rtspsrc 'location=...' ! decodebin ! autovideosink

在我的Mac上工作正常,但在Ubuntu上没有窗口。

Weirder:即使使用-v,也没有自动视频接收器的填充协商输出。 GST_DEBUG = autovideosink:6 ...也没有任何帮助吗?

我从未见过gstreamer保持沉默。

建议?

3 个答案:

答案 0 :(得分:0)

听起来像两个问题。为什么没有输出我不清楚。也许是错字?

关于管道,您很可能希望在视频接收器之前使用videoconvertautovideoconvert。如果您的图形驱动程序不支持解码器输出的色彩空间,则需要将其转换为能够满足接收器要求的格式。

答案 1 :(得分:0)

gst-launch-1.0 -e -v rtspsrc 'location=...' ! decodebin ! avenc_mpeg4 ! mp4mux ! filesink location=test.mp4 -e

在gst-launch-1.0中添加“ -e”参数可以为您完成这项工作 此参数基本上在关闭它之前将EOS(流的末尾)标头写入mp4文件,这是我

答案 2 :(得分:0)

您可以使用GST_DEBUG_DUMP_DOT_DIR env转储管道的点文件。引用Getting pipeline graphs

然后,您可以看到解码器使用哪个解码器(nvidia / vaapi / software),并查看使用哪个接收器。他们应该被匹配。

如果解码器和接收器不匹配,则可以使用nvvideoconvert / vaapipostproc将帧缓冲区复制到主机内存,并使用ximagesink进行渲染。或者您可以选择正确的解码器和接收器