[gst-devel] Using playbin2

Jeffrey Barish jeff_barish at earthlink.net
Mon Jun 15 16:25:34 CEST 2009

On Sunday 14 June 2009 19:39:18 Michael Smith wrote:
> On Sun, Jun 14, 2009 at 4:10 PM, Jeffrey
> Barish<jeff_barish at earthlink.net> wrote:
> > Jeffrey Barish wrote:
> >> My code works fine with playbin.  When I change to playbin2 (by changing
> >> the parameter in the element_factory_make call), the code no longer
> >> plays and I
> >> get error messages on the bus.  The error message is
> >>
> >> <GstGError at 0x8ecc390>, 'gstplaybin2.c(1783): pad_added_cb
> >> (): /GstPlayBin2:player'
> >>
> >> Can someone tell me what this error message means?  Is there something
> >> that I am supposed to do to use playbin2 that I do not need to do with
> >> playbin?
> >>
> >> This problem occurs with version 0.10.22.
> >
> > Even though playbin2 is in base plugins, I eliminated this error by
> > installing gstreamer0.10-plugins-bad, which provides input-selector.
> > However, now GStreamer is terminating with a segmentation fault.
> Yeah, older versions of playbin2 required input-selector, which is in
> -bad. Newer versions make it optional; it'll be moved to -base before
> playbin2 is officially declared 'stable'.
> As for the crash - well, you'll have to tell us where it's crashing
> for us to be able to help you. However, I'd strongly suggest upgrading
> to the current version first, if you can.

I created a test program to illustrate the problem.  The test program works 
unless I put a sleep(1.0) in the gobject loop.  (I run the gobject loop 
manually so that I can perform some additional operations each iteration.)  
That discovery got me thinking about the possibility that delays in my 
gobject loop were causing the problem.  I tried disabling the additional 
commands once GStreamer is playing (so that the only extra statement in the 
loop is the get_state).  The program then works.  It seems that the problem 
has to do with punctuality in dealing with the about-to-finish message.  With 
the additional commands disabled, if I have the loop sleep for a reasonable 
time (e.g., 50 ms), the program seg faults.  I have to reduce the sleep 
to 1 us before it stops seg faulting.  Is it possible that the timing in 
playbin2 is really this critical?  I have to read a socket, so I don't see a 
way to get the loop this tight -- not to mention the load on the system if 
the loop has to buzz this quickly (which goes to 100%).  Doing a blocking 
context iteration is normally the right solution, but then the loop loses 
track of the sockets.  I suppose that I am going to have to find a solution 
using multithreading so that the sockets are monitored in a loop separate 
from gobject.  I am still wondering about two things: (1) Is a seg fault the 
right thing to happen when handling of the about-to-finish message is tardy?  
I would have expected playbin2 to behave as it does when one is not 
monitoring about-to-finish, i.e., the buffer empties and we get an EOS 
message.  (2) I may be misinterpreting my findings, but it seems as if the 
time remaining in the buffer when the about-to-finish message is sent is 
about 1 us.  Shouldn't the message be sent sooner?

I could post my test program if doing so would be helpful.

As for running the latest version, I tried to make 0.10.23.  I got close.  
After making gobject, gstreamer was still finding the old gobject (the one 
provided by Ubuntu for running Gnome).  A message advised that I remove the 
old one, but had I done so all of Gnome would have been removed.  The basic 
problem is that I don't know what I'm doing.  I bet there's a way to tell 
configure where to find the right gobject.  I upgraded to Ubuntu 9.04 to get 
version 0.10.22.
Jeffrey Barish

More information about the gstreamer-devel mailing list