class Player(object):
def __init__(self, pipeline):
self.pipeline = pipeline
+
bus = self.pipeline.get_bus()
bus.add_signal_watch()
- bus.connect("message", self.bus_message_cb)
+ bus.connect("message::eos", self.on_eos)
+ bus.connect('message::error', self.on_error)
self.mainloop = GObject.MainLoop()
pipeline = Gst.parse_launch(pipeline_string)
return Player(pipeline)
- def stop(self):
- self.mainloop.quit()
- self.pipeline.set_state(Gst.State.NULL)
+ def on_eos(self, bus, message):
+ self.stop()
- def bus_message_cb(self, unused_bus, message):
- if message.type == Gst.MessageType.EOS:
- self.stop()
+ def on_error(self, bus, msg):
+ (err, debug) = msg.parse_error()
+ print("Error: %s" % err)
+ self.stop()
def play(self):
self.pipeline.set_state(Gst.State.PLAYING)
+ self.mainloop.run()
- try:
- self.mainloop.run()
- except KeyboardInterrupt:
- self.stop()
- return 1
-
- return 0
+ def stop(self):
+ self.mainloop.quit()
+ self.pipeline.set_state(Gst.State.NULL)