Connect two separate pipelines (not at the same time) to same HDMI output?

Martin Vachovski Martin.Vachovski at
Mon Aug 21 13:16:39 UTC 2017

I can suggest one more option:

Having 3 pipelines and using intevideosink / intervideosrc communication:

// First pipeline: live stream:

autovideosrc ! ... ! intervideosink channel="live_stream_channel"

// Second pipeline: file playback:

?filesrc ! ... ! intervideosink channel="file_playback_channel"

// Third pipeline: consumer:
intervideosrc name="intervideosrc_element" channel="...." ! .... ! ximagesink

In theory, I think it should be easy just to change the "channel" property

of "intervideosrc_element" to "live_stream_channel" or "file_playback_channel?"  while playing, or at most you just need to stop or pause the third pipeline.

Probably care should be taken, the first and the second pipelines to output exactly the same format

About which one is the best- the best one is the easiest to try first :)



From: gstreamer-devel <gstreamer-devel-bounces at> on behalf of Maurer, Martin <martin2.maurer at>
Sent: Monday, August 21, 2017 1:42 PM
To: gstreamer-devel at
Subject: Connect two separate pipelines (not at the same time) to same HDMI output?


I have two pipelines:
One to display a live stream on a monitor.
One to decompress a video file and display it on a monitor.

At the moment these are two separate programs.

Now I want to put them into the same program, displaying the output to the same monitor.
The program shall decide which pipeline to display on the monitor, never both at the same time.

I found different possibilities, but what are the differences/advantages/disadvantages?

a) Use two valves and a funnel
Can one pipeline be playing while the other is not playing or pipeline not even existing at all?
Or do I need to add a fakesrc to input of valve for each not existing pipeline?

b) Use an input selector
Can one pipeline be playing while the other is not playing?

c) Use two output selectors (one for each pipeline) and switch between fakesink and real output.
Does the monitor of one pipeline then get free to use for other pipeline or is it still busy?
Can I take away elements from a output selector which are not actively used? Or not so easily possible?

d) Stop and disable first pipeline completely to free "monitor element" and (when done) use "monitor element" in second pipeline.
Would it just be enough to pause or stop the first pipeline? Or do I need to unlink the pipeline to get the monitor element free to use in another pipeline?
Or is only one pipeline supported at all per program/executable/message loop?

Note: Would be good if same mechanism is working in Windows and Linux.

Best regards,


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

More information about the gstreamer-devel mailing list