1#!/usr/bin/python3 2import os 3import sys 4 5try: 6 import gi 7except ImportError: 8 print("ERROR: gst_player requires pygobject to be installed.") 9 sys.exit(1) 10 11from gi.repository import GLib 12 13try: 14 gi.require_version("Gst", "1.0") 15 from gi.repository import Gst 16except (ImportError, ValueError) as err: 17 print("ERROR: Unable to import gstreamer.\n%s" % err) 18 sys.exit(1) 19 20if not Gst.init_check(None): 21 print("ERROR: Unable to initialize gstreamer.") 22 sys.exit(1) 23 24player = Gst.ElementFactory.make("playbin", "player") 25if player is None: 26 print('ERROR: Gst.ElementFactory.make("playbin", "player") failed') 27 sys.exit(1) 28 29 30def on_message(bus, message): 31 if message.type == Gst.MessageType.ERROR: 32 player.set_state(Gst.State.NULL) 33 simpleMessage, advMessage = message.parse_error() 34 print("Gstreamer error '%s': %s" % (simpleMessage, advMessage)) 35 elif message.type == Gst.MessageType.EOS: 36 player.set_state(Gst.State.NULL) 37 return True 38 39 40fakesink = Gst.ElementFactory.make("fakesink", "fakesink") 41player.set_property("video-sink", fakesink) 42bus = player.get_bus() 43bus.add_signal_watch() 44bus.connect("message", on_message) 45 46 47def play(loop): 48 line = sys.stdin.readline().strip() 49 if not line: 50 loop.quit() 51 return 52 53 if os.path.isfile(line): 54 player.set_state(Gst.State.NULL) 55 player.set_property("uri", "file://" + line) 56 player.set_state(Gst.State.PLAYING) 57 else: 58 print("file not found:", line) 59 player.set_state(Gst.State.NULL) 60 return True 61 62 63loop = GLib.MainLoop() 64GLib.idle_add(play, loop) 65loop.run() 66