Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import gi
- gi.require_version('Gst', '1.0')
- from gi.repository import Gst, GObject, GstNet, Gdk, Gtk, cairo
- Gst.init(None)
- from gi.repository import GdkX11, GstVideo
- import signal
- class BasicPlayer(object):
- base_time = 0
- def __init__(self, window=None):
- self.window = window
- self.pipeline = self.get_pipeline()
- self.bus = self.pipeline.get_bus()
- self.bus.add_signal_watch()
- self.bus.connect("message", self.on_message)
- self.bus.enable_sync_message_emission()
- self.bus.connect("sync-message::element",
- self.on_sync_message)
- self.pipeline.set_state(Gst.State.PLAYING)
- def get_pipeline(self):
- pipeline = Gst.Pipeline()
- source = Gst.ElementFactory.make('videotestsrc')
- adaptor1 = Gst.ElementFactory.make('videoconvert', 'adaptor1')
- overlay = Gst.ElementFactory.make('cairooverlay', 'overlay')
- adaptor2 = Gst.ElementFactory.make('videoconvert', 'adaptor2')
- sink = Gst.ElementFactory.make('eglglessink', 'sink')
- pipeline.add(source)
- pipeline.add(adaptor1)
- pipeline.add(overlay)
- pipeline.add(adaptor2)
- pipeline.add(sink)
- source.link(adaptor1)
- adaptor1.link(overlay)
- overlay.link(adaptor2)
- adaptor2.link(sink)
- overlay.connect('draw', self.on_overlay_draw)
- return pipeline
- def on_overlay_draw(self, overlay, cairo, timestamp, duration):
- print(overlay)
- print(cairo)
- print(timestamp)
- print(duration)
- def on_sync_message(self, bus, message):
- """Whe handle sync messages to put the video in a GTK DrawingArea"""
- if message.get_structure().get_name() == 'prepare-window-handle'\
- and self.window:
- Gdk.threads_enter()
- message.src.set_window_handle(self.window.movie_window
- .get_property('window').get_xid())
- Gdk.threads_leave()
- def on_message(self, bus, message):
- """Messages Handler"""
- t = message.type
- if t == Gst.MessageType.ERROR:
- err, debug = message.parse_error()
- print("Error: %s" % err, debug)
- elif t == Gst.MessageType.EOS:
- if self.enqueued is None:
- self.go_to_loop(True)
- else:
- self._sobstitute_video(self.enqueued)
- if __name__ == "__main__":
- player = BasicPlayer()
- signal.signal(signal.SIGINT, signal.SIG_DFL)
- Gtk.main()
Advertisement
Add Comment
Please, Sign In to add comment