GStreamer 打开活动流(播放)

GStreamer open active stream (playing)

我正在接收视频流(mpegts over rtp over udp)。目前我需要在“streamer”gstreamer 命令之前启动“receiver”。有没有办法在活动时接收流?
所以我不需要在流媒体之前启动接收器。

我可能无法选择流的开始或停止时间,因此重要的是即使已经在播放也能接收到它。

gst-launch-1.0 -v udpsrc port=XXXX \
        caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP2T, payload=(int) 33" \
    ! queue leaky=upstream min-threshold-time=10000000 ! rtpmp2tdepay ! tsparse ! tsdemux name=DEM \
    DEM. ! video/x-h264 ! queue ! decodebin ! queue autovideosink \
    DEM. ! queue ! aacparse ! decodebin ! audioconvert ! queue ! autoaudiosink 

非常感谢


编辑

所以多亏了@SeB,我才能让它工作。重点是:

尽管如此,

结果

生成的管道看起来像这样:

gst-launch-1.0 -v udpsrc port=5000 \
        caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP2T, payload=(int) 33" \
      ! queue leaky=upstream min-threshold-time=10000000 \
      ! rtpjitterbuffer latency=500 ! rtpmp2tdepay
      ! tsparse ! tsdemux name=DEM \
    DEM. ! video/x-h264 ! queue ! h264parse ! avdec_h264 ! queue autovideosink \
    DEM. ! queue ! aacparse ! avdec_aac \
      ! audioresample ! audioconvert ! queue ! autoaudiosink

最简单的方法是让发送方定期发送配置,以便您的接收方可以设置。有多种方法可以做到这一点:

# Using config-interval property of h264parse:
gst-launch-1.0 videotestsrc ! x264enc ! h264parse config-interval=1 ! mpegtsmux ! tsparse ! rtpmp2tpay ! udpsink port=5000

# Using insert-vui in x264enc:
gst-launch-1.0 videotestsrc ! x264enc insert-vui=1 ! h264parse ! mpegtsmux ! tsparse ! rtpmp2tpay ! udpsink port=5000

# For NVIDIA encoder:
gst-launch-1.0 videotestsrc ! nvvidconv ! nvv4l2h264enc insert-sps-pps=1 ! h264parse ! mpegtsmux ! tsparse ! rtpmp2tpay ! udpsink port=5000

然后您可以随时获取视频(虽然设置和显示可能需要几秒钟),例如(此处为 Linux 运行 X):

gst-launch-1.0 -v udpsrc port=5000 ! application/x-rtp,media=video,encoding-name=MP2T,clock-rate=90000,payload=33 ! rtpjitterbuffer latency=300 ! rtpmp2tdepay ! tsdemux ! h264parse ! avdec_h264 ! videoconvert ! xvimagesink