多个 RTMP 输入 - 画中画 - 流离线处理

Multiple RTMP inputs - picture in picture - stream offline handling

我正在使用 gstreamer 将两个 rtmp 输入的画中画组合成一个 rtmp 输出。 我已经设法创建了一个在两个流都离线时运行良好的管道 但是,当启动管道时其中一个 rtmp 流不存在时 - 管道不会启动。

有谁知道如何解决这个问题,并确保在一个 rtmp 源离线时管道不会被阻塞?

您可能需要将 identity 插入到合成器输入 sub-pipelines.

在本地主机上模拟 2 个源:

gst-launch-1.0 videotestsrc ! x264enc insert-vui=1 ! h264parse config-interval=1 ! mpegtsmux ! rtpmp2tpay ! udpsink port=5004

(第二个来源与端口 5005 相同),以下对于启动时处于活动状态的 0、1 或 2 个来源运行良好:

gst-launch-1.0 -v \
   udpsrc port=5004 ! application/x-rtp,media=video,encoding-name=MP2T,clock-rate=90000,payload=33 ! rtpjitterbuffer latency=300 ! rtpmp2tdepay ! tsdemux ! h264parse ! avdec_h264 ! videoconvert ! identity ! queue ! comp.sink_0 \
   udpsrc port=5005 ! application/x-rtp,media=video,encoding-name=MP2T,clock-rate=90000,payload=33 ! rtpjitterbuffer latency=300 ! rtpmp2tdepay ! tsdemux ! h264parse ! avdec_h264 ! videoconvert ! identity ! queue ! comp.sink_1 \
   compositor name=comp sink_0::xpos=0 sink_0::ypos=0 sink_0::width=320 sink_0::height=240 sink_1::xpos=0 sink_1::ypos=240 sink_1::width=320 sink_1::height=240 ! video/x-raw,width=320,height=480 ! videoconvert ! xvimagesink

对于 rtmp,使用来自第一个源的 mpeg 音频,它将类似于:

gst-launch-1.0 -v \
   rtmpsrc <your source1 and options> ! flvdemux name=demux0 ! queue ! h264parse ! avdec_h264 ! videoconvert ! identity ! queue ! comp.sink_0 \
   rtmpsrc <your source2 and options> ! flvdemux name=demux1 ! queue ! h264parse ! avdec_h264 ! videoconvert ! identity ! queue ! comp.sink_1 \
   compositor name=comp sink_0::xpos=0 sink_0::ypos=0 sink_0::width=320 sink_0::height=240 sink_1::xpos=0 sink_1::ypos=240 sink_1::width=320 sink_1::height=240 ! video/x-raw,width=320,height=480 ! videoconvert ! autovideosink \
   demux0. ! queue ! audio/mpeg ! decodebin ! audioconvert ! audioresample ! autoaudiosink