Changing filesink location after a mux with many inputs.

Paddy pat.blanchon at gmail.com
Thu Aug 30 03:36:36 PDT 2012


Hi,

I'm trying to dynamically change the filesink location on the fly (every 2
minutes, without losing data) on the following pipeline:

h264 videosrc ----> videoQ ---->
                                              matroskamux ----> filesink
aac audiosrc  ----> audioQ ---->

The mux & filesink are in their own bin.

Taking my lead from the posts on here & the gstreamer documentation this is
what I've tried, unsuccessfully:

1) block both Q src pads with gst_pad_set_blocked_async()

2) then when both callbacks have been received ....
unlink the mux
send an EOS event to the mux element
g_idle_add(func to destroy the mux & filesink bin)
create & link a new mux & filesink bin with the new location
unblock both Qs with gst_pad_set_blocked_async()

The problem with this is that the second callback never happens - I just
have a lot of threads waiting on g_cond_wait(). I'm assuming that this is
because no data is flowing into the second queue src pad.

Working with that assumption, I then tried blocking/unblocking only one of
the queues & it got a bit further - I get the callback for the unblock but
the second file is zero bytes in size, for the third file the blocked
callback is never received (so the file is not created) & for the fourth
file gst_pad_set_blocked_async() fails as the queue is already blocked.

If I remove the audio path & queue, it works perfectly.

Does anyone have any ideas on how this can be done ??

Many thanks

Paddy



--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/Changing-filesink-location-after-a-mux-with-many-inputs-tp4656116.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.


More information about the gstreamer-devel mailing list