rendered paste bodyimport gobject
gobject.threads_init ()
import gst
import sys
class 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):
if not 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):
print "seek failed"
self.loop.quit ()
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 ()