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