Issue with UDP stream in concat pipeline

Hi,

I’m working on a GStreamer pipeline to transcode multiple streams gaplessly using the concat element. The pipeline works great when all input media are local files. It also works with some network sources like HLS. However, I run into issues when one of the streams is a UDP source.

Specifically, when a UDP stream is added to the list, the pipeline’s output becomes choppy and discontinuous, and I receive discontinuity errors:

WARNING: from element /GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTSDemux:tsdemux1: CONTINUITY: Mismatch packet 5, stream 5 (pid 0x0041)
Additional debug info:
../gst/mpegtsdemux/tsdemux.c(2769): gst_ts_demux_queue_data (): /GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTSDemux:tsdemux1
0:00:10.043224137 4148085 0x7151b0000ef0WARNING: from element /GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTSDemux:tsdemux1: CONTINUITY: Mismatch packet 13, stream 4 (pid 0x0041)
Additional debug info:
../gst/mpegtsdemux/tsdemux.c(2769): gst_ts_demux_queue_data (): /GstPipeline:pipeline0/GstURIDecodeBin:uridecodebin0/GstDecodeBin:decodebin0/GstTSDemux:tsdemux1

This is reproducible using test stream, e.g:

gst-launch-1.0 \
videotestsrc num-buffers=256 ! videoconvert ! x264enc tune=zerolatency !\
h264parse ! mpegtsmux name=mux !\
filesink location=/tmp/test.ts

For udp source I’m using:

tsplay -loop /tmp/test.ts 127.0.0.1:2222

And the pipeline with concat looks like this:

gst-launch-1.0\
  uridecodebin uri=file:///tmp/test.ts name=dec1 \
  dec1. ! queue ! vid_concat. \
  uridecodebin uri=udp://127.0.0.1:2222 ! decodebin name=dec2 \
  dec2. ! queue ! vid_concat. \
  concat name=vid_concat ! videoconvert ! autovideosink

Is it possible to use concat element with UDP inputs? Any tips would be greatly appreciated! Thanks!

Additionally I’ve observed the same outcome using gst-play in gapless mode gst-play-1.0 --gapless ..., which I believe is using streamsynchronizer internally.

Same goes with the uriplaylistbin element.