I'm working on some code that generates a live stream of audio and video and sends it to an icecast server with shout2send. Not all of the media is coming from a playbin/decodebin, so I'm not able to use the about-to-finish callback to switch to another media file without stopping the pipeline. Sometimes I'm inserting silence or the test signal, or audio from a network source. In order to switch between sources or media files, I'm currently setting the pipeline to null, relinking it and setting it to play again. This causes shout2send to disconnect and reconnect to the icecast server which disconnects the icecast listeners. To get around this for audio only, I've been sending the audio to pulse, and with a second pipeline I'm getting audio from pulse and sending to shout2send. Now I need to make this work for video as well. Is there a workaround for video similar to using pulse for audio? Or is there a way to modify the pipeline without disconnecting from shout2send? Thanks Sari _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
On Wed, 2016-09-14 at 15:39 -0700, Sari McFarland wrote:
Hi Sari, > I'm working on some code that generates a live stream of audio and > video and sends it to an icecast server with shout2send. Not all of > the media is coming from a playbin/decodebin, so I'm not able to use > the about-to-finish callback to switch to another media file without > stopping the pipeline. Sometimes I'm inserting silence or the test > signal, or audio from a network source. In order to switch between > sources or media files, I'm currently setting the pipeline to null, > relinking it and setting it to play again. This causes shout2send to > disconnect and reconnect to the icecast server which disconnects the > icecast listeners. To get around this for audio only, I've been > sending the audio to pulse, and with a second pipeline I'm getting > audio from pulse and sending to shout2send. > > Now I need to make this work for video as well. Is there a > workaround for video similar to using pulse for audio? Or is there a > way to modify the pipeline without disconnecting from shout2send? If you're always encoding + muxing the audio/video before feeding it to shout2send, then the intervideosink/src and interaudiosink/src elements might be useful in this case. You could basically have two separate pipelines, one encoder pipeline that always keeps running like this: interaudiosrc ! audioconvert ! audioresample ! vorbisenc ! queue ! mux. intervideosrc ! videoconvert ! videorate ! theoraenc ! queue ! mux. oggmux name=mux ! shout2send Then a second pipeline that feeds into the inter elements like for example playbin video-sink=intervideosink audio-sink=interaudiosink If you shut down the second pipeline (playbin) that feeds into the encoder, the encoder will start running, and the elements will keep repeating the last frame (or after a while black) in the video case, and generate silence in the audio case. So if you're quick enough to start up a new playbin pipeline with a different file it might appear almost gapless, and in any case the encoder keeps running without disconnecting, also in case there are decoding errors or such. This is a fairly limited setup of course, but it might just work for you. There's also a little playout streaming demo application here https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/tests/exa mples/playout.c which is a bit more sophisticated, but doesn't have quite the same simplicity as the above :) Cheers -Tim -- Tim Müller, Centricular Ltd - http://www.centricular.com Join us at the GStreamer Conference! 10-11 October 2016 in Berlin, Germany http://gstreamer.freedesktop.org/conference/ _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel |
Free forum by Nabble | Edit this page |