dynamic plugging

Tonu Jaansoo tonu.jaansoo at gmail.com
Thu Aug 31 12:39:12 UTC 2017


I put the cut down example to the github. Please check and tell whats wrong. (No qt actually needed for compiling. just remove all Q-things and itll run). I just use Qt creator alot.
I think if I solve this issue, this should be put to the Application developers manual. As there is no example about “catching” error from element and then synchronizing what comes next.

https://github.com/tonuj/teststream.git <https://github.com/tonuj/teststream.git>

Tõnu

> On 30 Aug 2017, at 10:25, Tonu Jaansoo <tonu.jaansoo at gmail.com> wrote:
> 
> Hm
> 
> By catching error on the bus you mean relinking the pipeline with fakesinks, or do I have to do anything else like acknowledge or drop this message?
> Also can I remove all elements from bus callback and relink and set PLAYING states (same thread)?  Bus callback runs in main thread.
> 
> When I remove something from bin while playing and without any blocking probes, doesn't this create a situation where pipeline sometimes just crash? 
> 
> I have attached very ugly hack that 
> 
> * Creates pipeline where it writes to file and to rtspclientsink. Rtspclientsink connects to the server.
> * After startup, i quicly shut down rtsp server
> * When rtspclientsink generates error on bus, I replace audio and video branches with fakesinks.. (this works sometimes and rest of the pipeline still writing to file)
> * After 30s timeout from startup, from callback I try to replace fakesinks with the pipeline that originally was in place. This has worked once … dont know what I was doing :-D
> 
> Tõnu
> 
> 
> <gst.cpp><gst.h>
> 
> 
>> On 28 Aug 2017, at 20:50, Tim Müller <tim at centricular.com> wrote:
>> 
>> On Wed, 2017-08-23 at 14:08 +0300, Tonu Jaansoo wrote:
>> 
>> Hi Tonu,
>> 
>>> (snip pipeline)
>>> 
>>> Now this commandline has problem. When internet connection fails for
>>> a second, rtspclientsink tears down everything - also writing to
>>> files. I want that when internet fails, audio+video is still being
>>> captured into files. Currently I have different commandline without
>>> rtspclientsink branches that I use when there is no internet.
>>> 
>>> I am trying to rewrite this in C, but so that I intercept
>>> rtspclientsink having no connection and dynamically unpluging RTSP
>>> branches of the pipeline.
>>> 
>>> Something like this is correct way to do it?
>>> 
>>> * wait on bus for error message from rtspclientsink
>>> * when error comes, set all elements from q1 and q3 to rtspclientsink
>>> to NULL
>>> * also remove those elements from bin
>>> * wait 10s to retry connection
>>> * dynamically add all elements that were removed 
>>> * set set their status to PLAYING
>>> 
>>> I have tried something like this. I get no errors, but no luck
>>> getting stream going.
>> 
>> There are two parts to this:
>> 
>> 1) catching the error message on the bus in your application, and then
>> doing something smarter than just stopping the entire pipeline; and
>> 
>> 2) making sure that a 'flow error' return from rtspclientsink doesn't
>> make the upstream elements stop streaming.
>> 
>> There is an 'errorignore' element that can do 2. You'll want one of
>> those in each branch before the rtspclientsink. When an error happens
>> you should be able to unlink the sink and stop it, and then restart it
>> and re-link. The errorignore element will make sure the error flow
>> return is not propagated to the rest of the pipeline.
>> 
>> Cheers
>> -Tim
>> 
>> -- 
>> Tim Müller, Centricular Ltd - http://www.centricular.com
>> 
>> Join us at the GStreamer Conference!
>> 21-22 October 2017 in Prague, Czech Republic
>> http://gstreamer.freedesktop.org/conference/
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
> 
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20170831/b9129e10/attachment.html>


More information about the gstreamer-devel mailing list