All pastes #637202 Raw Edit

gstreamer segment seeking

public python v1 · immutable
#637202 ·published 2007-07-28 17:35 UTC
rendered paste body
import gobjectgobject.threads_init ()import gstimport sysclass Loop (object):    def __init__ (self):        self.loop = gobject.MainLoop ()        self.pipeline = gst.Pipeline ()        self.bus = self.pipeline.get_bus ()        self.bus.add_signal_watch ()        self.bus.connect ("message::eos", self._bus_message_eos_cb)        self.bus.connect ("message::error", self._bus_message_error_cb)        self.bus.connect ("message::segment-done",            self._bus_message_segment_done_cb)        for e in ("filesrc", "decodebin", "audioconvert", "alsasink"):            element = gst.element_factory_make (e)            setattr (self, e, element)            self.pipeline.add (element)        self.filesrc.set_property ("location", sys.argv [1])        self.filesrc.link (self.decodebin)        self.decodebin.connect ("new-decoded-pad",            self._decodebin_new_decoded_pad_cb)                self.audioconvert.link (self.alsasink)    def _bus_message_eos_cb (self, bus, message):        print "EOS",        self.loop.quit ()    def _bus_message_error_cb (self, bus, message):        print "ERROR", message        self.loop.quit ()    def _bus_message_segment_done_cb (self, bus, message):        print "segment done"        self.seek ()    def _decodebin_new_decoded_pad_cb (self, decodebin, pad, no_more):        pad.link (self.audioconvert.get_pad ("sink"))    def seek (self):        self.pipeline.seek (1.0, gst.FORMAT_TIME,            gst.SEEK_FLAG_FLUSH | gst.SEEK_FLAG_SEGMENT,            gst.SEEK_TYPE_SET, 10 * gst.SECOND,            gst.SEEK_TYPE_SET, 12 * gst.SECOND)    def start (self):        self.pipeline.set_state (gst.STATE_PAUSED)        self.pipeline.get_state ()        self.seek ()        self.pipeline.set_state (gst.STATE_PLAYING)        self.loop.run ()        self.pipeline.set_state (gst.STATE_NULL)if __name__ == '__main__':    Loop ().start ()