Playing multi stream containers gaplessly

Vladislavs Zaluckis v.zaluckis at
Tue May 30 08:22:42 UTC 2017

I have posted this question to StackOverflow some time ago, but apparently there is no activity compared to this list, so I'm reposting. 

I've been struggling with this problem for some time now, with no success. What I am trying to do is to play two container files with multiple streams inside (I take one video and just one audio) one after another without a gap. I am using filesrc/decodebin for input, then some simple processing, then playing to autosinks. As one file ends, I am relinking the pipeline dynamically, following the procedure described in the app dev guide. So far so good, but when I try to run the actual production-like pipeline, it gets stuck on EOS processing. The "production" pipeline is encoding to x264/AAC, then muxing to MPEGTS, then packetizing using RTP, then sending to UDP. What I see is that it blocks as soon as I drop the EOS event on the audio stream and block the pad. The audio stream somehow flows quicker at least before the encoder, and the moment I get EOS on audio stream, the video stream is still a couple of seconds in the past. So, I reckon I must block the audio source pad, drop the EOS, and wait for EOS on the video stream before actually changing the input bin. Alas, as soon as I mess with the audio EOS, pipeline gets stuck and no further callback is called.

Is there anything I am missing? Can you suggest another way how to implement relinking of the pipeline to play multi-stream containers so that there are no gaps?

In case you want to visualise, here is the pipeline DOT file after it is stuck:

I am not posting the code as it is quite lengthy. I will post fragments on as needed basis.

Thank you so much in advance, all hope is on you :-)


Best, Vlad

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the gstreamer-devel mailing list