一个通用的 gstreamer 管道使用 xvimagesink 来拉取 rtmp 流 with/without 音频

A general gstreamer pipeline use xvimagesink to pull rtmp stream with/without audio

假设有2种流,一种是纯视频流(无音频),另一种是带音频的视频。我们知道带有 uri 的 playbin 可以播放它们,即使我们不知道我们得到的是哪种流,但是是否有任何使用 xvimagesink 或 nv3dsink(不是 autovideosink 等)的管道可以同时接收(有或没有音频)原因不知道视频流是否带音频?

例如,如果视频流是带音频的,我们播放带音频的视频,否则我们播放不带音频的视频。

我试过了

gst-launch-1.0 rtmpsrc location="$RTMP_SRC" ! \
    flvdemux name=demux \
    demux.audio ! queue ! decodebin ! autoaudiosink \
    demux.video ! queue ! decodebin ! autovideosink

但如果视频没有音频,屏幕上只会显示一帧。

https://github.com/matthew1000/gstreamer-cheat-sheet/blob/master/rtmp.md 这篇文章对我帮助很大,但我仍在寻找像“playbin”一样工作但使用 xvimagesink 或 nv3dsink 播放视频的优秀通用管道。

你可以直接使用 video-sink 属性 的 playbin:

gst-launch-1.0 playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm video-sink=xvimagesink

gst-launch-1.0 playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm video-sink=nv3dsink