2017-02-21 11:02:14 +00:00
|
|
|
#!/usr/bin/env python
|
|
|
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
import gi
|
|
|
|
gi.require_version('Gst', '1.0')
|
|
|
|
from gi.repository import GObject, Gst
|
|
|
|
|
|
|
|
def bus_call(bus, message, loop):
|
|
|
|
t = message.type
|
|
|
|
if t == Gst.MessageType.EOS:
|
2018-07-20 13:58:35 +00:00
|
|
|
sys.stdout.write("End-of-stream\n")
|
2017-02-21 11:02:14 +00:00
|
|
|
loop.quit()
|
|
|
|
elif t == Gst.MessageType.ERROR:
|
|
|
|
err, debug = message.parse_error()
|
|
|
|
sys.stderr.write("Error: %s: %s\n" % (err, debug))
|
|
|
|
loop.quit()
|
|
|
|
return True
|
|
|
|
|
|
|
|
def main(args):
|
|
|
|
if len(args) != 2:
|
|
|
|
sys.stderr.write("usage: %s <media file or uri>\n" % args[0])
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
GObject.threads_init()
|
|
|
|
Gst.init(None)
|
|
|
|
|
|
|
|
playbin = Gst.ElementFactory.make("playbin", None)
|
|
|
|
if not playbin:
|
|
|
|
sys.stderr.write("'playbin' gstreamer plugin missing\n")
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
# take the commandline argument and ensure that it is a uri
|
|
|
|
if Gst.uri_is_valid(args[1]):
|
|
|
|
uri = args[1]
|
|
|
|
else:
|
|
|
|
uri = Gst.filename_to_uri(args[1])
|
|
|
|
playbin.set_property('uri', uri)
|
|
|
|
|
|
|
|
# create and event loop and feed gstreamer bus mesages to it
|
|
|
|
loop = GObject.MainLoop()
|
|
|
|
|
|
|
|
bus = playbin.get_bus()
|
|
|
|
bus.add_signal_watch()
|
|
|
|
bus.connect ("message", bus_call, loop)
|
|
|
|
|
|
|
|
# start play back and listed to events
|
|
|
|
playbin.set_state(Gst.State.PLAYING)
|
|
|
|
try:
|
|
|
|
loop.run()
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
|
|
|
|
# cleanup
|
|
|
|
playbin.set_state(Gst.State.NULL)
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
sys.exit(main(sys.argv))
|