Using gst-python with multiple pipelines

Gary Thomas gary at mlbassoc.com
Fri Mar 23 12:26:40 PDT 2012


On 2012-03-22 04:39, Gary Thomas wrote:
> On 2012-03-22 04:20, Tim-Philipp Müller wrote:
>>
>> Hi,
>>
>>> Not sure I understand the question. I'm adapting some code I found
>>> on the web which uses gst pipelines + wxPython (which was adapted from
>>> the wxGTK version).
>>>
>>> I create the pipeline like this
>>> self.player = gst.element_factory_make("playbin", "player")
>>> self.playing = False
>>> bus = self.player.get_bus()
>>> bus.add_signal_watch()
>>> bus.enable_sync_message_emission()
>>> bus.connect('message', self.on_message, colour)
>>> bus.connect('sync-message::element', self.on_sync_message, colour)
>>> within the code that creates the pane. Then I initiate the pipeline with
>>> self.player.set_property('uri',"file://" + path)
>>> self.player.set_state(gst.STATE_PLAYING)
>>> self.playing = True
>>>
>>> I'm happy to share my actual code if that helps - it's currently just
>>> a sandbox for ideas anyway.
>>
>> Yes, a small example that demonstrates the issue would definitely be
>> useful.
>
> Should I send it to this list or you directly? Currently it's very
> raw and around 200 lines.

I've put my program at http://www.mlbassoc.com/misc/gstreamer_demo.py
To run it, you'll need wxPython
To see the failure, enable the 'if False' on line 178.  You'll also need
to change the paths in the 3 following lines to be valid video files on
your system.

Try it - sometimes it runs, most times it just crashes randomly on startup.

>>
>> What I was trying to find out was if you are using (for example)
>> ximagesink, or perhaps some other video sink or perhaps appsinks.
>
> I'm just using the simple 'playbin'
>
>> X11/Gtk doesn't do multi-threading well, so one must take care not to do
>> anything X11/Gtk related from GStreamer streaming threads (like a sync
>> message handler).
>
> Here's my sync_message handler:
> def on_sync_message(self, bus, message, data):
> print "on_sync_message: " + data
> if message.structure is None:
> return
> message_name = message.structure.get_name()
> if message_name == 'prepare-xwindow-id':
> imagesink = message.src
> imagesink.set_property('force-aspect-ratio', True)
> imagesink.set_xwindow_id(self.GetHandle())
>
> I tried moving the GetHandle() call which is the only X11 function
> I can see out of the sync handler and it didn't change the behaviour.
>

-- 
------------------------------------------------------------
Gary Thomas                 |  Consulting for the
MLB Associates              |    Embedded world
------------------------------------------------------------


More information about the gstreamer-devel mailing list