Modifiying GStreamer pipelines in PLAYING

Recently there has been some discussion in the Jokosher team about creating an abstraction for our main GStreamer pipeline. Jokosher is probably one of the most complex Open Source GStreamer applications out there right now, and managing the state of the pipeline is becoming complex. In GStreamer the pipeline has different states – NULL, READY, PAUSED and PLAYING. These states indicate what the pipeline is doing – PLAYING plays the audio as an example. We were under the impression that only certain states allowed modifications to the pipeline, so all pipeline modifications in Jokosher happen in NULL or READY. So, Laszlo, the King Of Cairo and Canadian Supreme has been working on something known as the ‘GP’ – the Grand Pipeline. Its an abstraction that means we have controlled access to the pipeline and the states would be handled automatically.

Well, it turns out all this is moot. Today, in an informal discussion in #gstreamer it was revealed that you can actually modify the pipeline in PLAYING. This is a big deal. It means we don’t need the GP, and it importantly means that we can hugely simply our use of state in Jokosher – and only ever deal with PAUSED (when stopped) and PLAYING (when playing). Of course, its all theory right now, when we hack the code it may not work, but if Wim Taymens deems it so, it should work. He is Jedi.

I know the last two paragraphs are a dull-o-rama for non GStreamer people, but Google needs to be taught that you can modify a GStreamer pipeline in PLAYING!

  • http://sayamindu.randomink.org/ramblings/2006/12/01/modifying-gstreamer-pipelines-whil-in-state-playing/ Sayamindu’s Blog » Blog Archive » Modifying Gstreamer pipelines whil in state PLAYING

    [...] This would definitely make life a lot easier for me. [...]

  • Rob

    Indeed it is possible, Farsight does a lot of it for doing things like dynamically changing codec and changing sinks and sources mid-stream, see http://projects.collabora.co.uk/trac/farsight/browser/plugins/rtp/rtpstream.c