[gst-devel] Several novice questions

Edward Hervey bilboed at gmail.com
Fri Jan 18 17:16:20 CET 2008


On Fri, 2008-01-18 at 09:14 -0700, Jeffrey Barish wrote:
> Edward Hervey wrote:
> 
> > Hi,
> > 
> > On Fri, 2008-01-18 at 08:28 -0700, Jeffrey Barish wrote:
> >> 1. I gather that I am expected to change the state of the player on EOS
> >> (which seems strange to me as I would have thought that the player would
> >> know to stop playing when the stream has ended).  To this end, I included
> >> the following code:
> >> 
> >>     self.player = gst.element_factory_make('playbin', 'player')
> >>     bus = self.player.get_bus()
> >>     bus.add_signal_watch()
> >>     bus.connect('message', self.on_message)
> >> 
> >> def on_message(self, bus, message):
> >>     print "Got message", message  # nothing ever prints
> >>     t = message.type
> >>     if t in (gst.MESSAGE_EOS, gst.MESSAGE_ERROR):
> >>         self.player.set_state(gst.STATE_NULL)
> >> 
> >> However, on_message is never called.  Any idea what I am doing wrong?
> > 
> >   Are you running a mainloop ? I think it won't work if you're not
> > runnign a mainloop.
> 
> I have the impression that pygst takes care of the main loop for me.  I
> don't see main_loop in the pygst documentation nor in the tutorial
> examples, nor does pygst have a function main_loop or mainloop.

  Use a standard gtk or gobject mainloop.

> 
> >> 2. get_state() returns a tuple (with 3 elements) of the Element's current
> >> state.  Where is the documentation on the elements of the tuple?  It
> >> appears that the second element is the actual state.  Is this observation
> >> always true?
> > 
> >   Look in the C API for gst_element_get_state. The returned values are
> > the 3 last arguments of that function.
> 
> I am getting a tuple with (type GstStateChangeReturn, type GstState, type
> GstState), so I guess the first element is the return value of
> gst_element_get_state, the second is the current state, and the third is
> the pending state.  I am interested in knowing more about how ASYNC state
> changes work and when they are used.
> 
> >> 3. I would like to know the elapsed ratio so I tried
> >> query_position(gst.FORMAT_PERCENT).  I get a query error.  It works to do
> >> query_position(gst.FORMAT_TIME) and query_duration(gst.FORMAT_TIME) and
> >> compute the ratio, but why doesn't the simpler solution work?  Is
> >> gst.FORMAT_PERCENT a percentage (0 to 100), as the name implies, or is it
> >> actually a ratio (0 to 1)?
> >> 
> > 
> >    What are you doing that query on ? the pipeline ? the sinks ?
> 
> I am doing the query on self.player:
> 
>     ratio = self.player.query_position(gst.FORMAT_PERCENT)[0]
> 
> This works:
> 
>     position = self.player.query_position(gst.FORMAT_TIME)[0]
> 
> 
> Thanks for your quick reply.





More information about the gstreamer-devel mailing list