- #!/usr/bin/python3
- import gi
- import signal
- from termcolor import colored
- # import GStreamer and GTK-Helper classes
- gi.require_version('Gst', '1.0')
- from gi.repository import GLib, Gst, Gtk, GObject
- # init GObject before importing local classes
- GObject.threads_init()
- Gst.init(None)
- loop = GLib.MainLoop()
- def busfunc(bus, message):
- print(colored(message.src.get_name(), 'green'), message.type, message)
- if message.type == Gst.MessageType.ERROR:
- (err, debug) = message.parse_error()
- print(colored(err, 'red'))
- print(colored(debug, 'yellow'))
-
- if message.src.get_name() == 'http':
- failover = p.get_by_name('failover')
- failover.set_property('active-pad', failover.get_static_pad('sink_1'))
- # make killable by ctrl-c
- signal.signal(signal.SIGINT, signal.SIG_DFL)
- print("parse_launch")
- p = Gst.parse_launch("""
- input-selector name=failover ! autovideosink
- videotestsrc ! video/x-raw,width=1280,height=720 ! failover.sink_1
- souphttpsrc name=http location="http://localhost/~peter/ED_1280.avi" ! decodebin ! failover.sink_0
- """)
- print("add_watch")
- bus = p.get_bus()
- bus.add_signal_watch()
- bus.connect('message', busfunc)
- # print("add_watch")
- # httpbus = p.get_by_name('http').get_bus()
- # httpbus.add_watch(0, busfunc, None)
- print("set_state(PLAYING)")
- p.set_state(Gst.State.PLAYING)
- loop.run()
|