[gst-devel] Any ways to add/remove branches to/from a running pipeline
Shiping
shiping.li at gmail.com
Fri Oct 16 18:33:39 CEST 2009
Thanks sledge and Aurelien for quick reply. I will give it a shot ASAP and,
may come back with a successful story :handshake: or more questions.
:confused:
Aurelien Grimaud (elzz) wrote:
>
> Le 13/10/2009 20:23, Shiping a écrit :
>> Thanks Aurelien for your suggestion, and many thanks to all the answers
>> posted here. I really appreciated. This makes me feel I am not alone,
>> there are still many experts out there willing to provide help. :-)
>>
>> I tried the method, and here are the results:
>>
>> First let me put my pipeline here:
>>
>> video source -> tee -> record bin
>> -> preview bin
>> -> stream bin
>>
>> I tried to add preview bin when recode bin was running, first I blocked
>> the
>> tee->src to preview bin, BUT it stopped the whole pipeline, including
>> record
>> bin. I tried several times, but could not figure out why, and no error
>> messages printed out when I set debug level to 3.
>>
>> Then I tried adding preview bin directly to running pipeline, it worked
>> unexpectedly. I do not know why it worked, it should not according the
>> documents you pointed. Removing preview bin from running pipeline was
>> also
>> working.
>>
> If you do your stuff (link/unlink) between two buffers, it will be ok.
> But a buffer arrives on tee:sink, then you had a src pad and tee
> forwards to the new src pad which is NOT LINKED. Therefore you get the
> internal data flow problem.
> Moreover this error is carried on all upstream elements and your whole
> pipeline stops !
>
> I used tee to forward the same stream to many udpsrc which were
> linked/unlinked dynamically.
> Without blocking stream, sometimes, the streaming process for all udpsrc
> stopped for the reason mentionned before.
>
> You have to make sure no buffer arrives to tee, therefore block your tee
> input (sink pad).
> When blocked (in the blocked call back for instance), link or unlink as
> needed, the (always in your callback) unblock the tee:sink pad.
>
> Non blocking the pad will work only to remove a downstream bin, if you
> remove the tee:src request pad while pipeline is running.
> The locks used in tee ensure (I think) that it works.
>
> To be sure : use block.
>
> Aurelien
>> Then when I tried to add stream bin, it became more difficult. I tried
>> many
>> methods - blocking, unblocking, directly adding to running pipeline, etc.
>> None of them worked, and the most problems were like this:
>>
>> <udpsink0> warning: Internal data flow problem.
>> WARN basesink
>> gstbasesink.c:3279:gst_base_sink_chain_unlocked:<udpsink0>
>> warning: Received buffer without a new-segment. Assuming timestamps start
>> from 0.
>> INFO GST_ERROR_SYSTEM
>> gstelement.c:1763:gst_element_message_full:<udpsink0> posting message:
>> Internal data flow problem.
>> INFO GST_ERROR_SYSTEM
>> gstelement.c:1786:gst_element_message_full:<udpsink0> posted warning
>> message: Internal data flow problem.
>>
>> So I am technically stuck here for a couple of days now.
>>
>> Could you guys please shad a light on me?
>>
>> Many thanks
>>
>> Shiping
>>
>>
>> Aurelien Grimaud (elzz) wrote:
>>
>>> Le 07/10/2009 23:14, Shiping a écrit :
>>>
>>>> Hi, there:
>>>>
>>>> I am trying to record live video, so a pipeline is setup to record
>>>> video
>>>> continuously.
>>>>
>>>> And during this process, I would like to preview the video from source.
>>>> So
>>>> I add a tee to the recording pipeline and branch out for previewing.
>>>> When
>>>> preview stopped, the branch was removed from the pipeline.
>>>>
>>>> I tried hard not to pause recording pipeline, but got all kinds of
>>>> errors
>>>> and unstable recording. Currently all I can do is pause recording,
>>>> inset/remove branch, and restart the whole pipeline.
>>>>
>>>> Of cause, I lost some frames in above process.
>>>>
>>>> My question is: Is there a way to do it without pausing the recording?
>>>>
>>>> Any suggestions?
>>>>
>>>> Thanks
>>>>
>>>> Shiping
>>>>
>>>>
>>> Hi,
>>>
>>> You should read
>>> http://cgit.freedesktop.org/gstreamer/gstreamer/tree/docs/design/part-block.txt
>>> Dynamically changing a PLAYING pipeline should be done with pad block to
>>> prevent any error.
>>> Block your tee sink pad, link/unlink your preview branch, unblock.
>>>
>>> Aurelien
>>>
>>> ------------------------------------------------------------------------------
>>> Come build with us! The BlackBerry(R) Developer Conference in SF, CA
>>> is the only developer event you need to attend this year. Jumpstart your
>>> developing skills, take BlackBerry mobile applications to market and
>>> stay
>>> ahead of the curve. Join us from November 9 - 12, 2009. Register now!
>>> http://p.sf.net/sfu/devconference
>>> _______________________________________________
>>> gstreamer-devel mailing list
>>> gstreamer-devel at lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>>>
>>>
>>>
>>
>
>
> ------------------------------------------------------------------------------
> Come build with us! The BlackBerry(R) Developer Conference in SF, CA
> is the only developer event you need to attend this year. Jumpstart your
> developing skills, take BlackBerry mobile applications to market and stay
> ahead of the curve. Join us from November 9 - 12, 2009. Register now!
> http://p.sf.net/sfu/devconference
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>
--
View this message in context: http://www.nabble.com/Any-ways-to-add-remove-branches-to-from-a-running-pipeline-tp25794577p25928355.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.
More information about the gstreamer-devel
mailing list