#!/usr/bin/python3 import gi, time # import GStreamer and GTK-Helper classes gi.require_version('Gst', '1.0') from gi.repository import GLib, Gst, GObject # init GObject before importing local classes GObject.threads_init() Gst.init(None) from videodisplay import VideomixerWithDisplay from shmsrc import ShmSrc class Example: def __init__(self): self.mainloop = GObject.MainLoop() self.pipeline = Gst.Pipeline() self.bus = self.pipeline.get_bus() self.bus.add_signal_watch() self.bus.connect('message::eos', self.on_eos) self.bus.connect('message::error', self.on_error) self.addTest('/tmp/v-cam2') self.addTest('/tmp/v-cam1') def addTest(self, socket): self.mixdisplay = VideomixerWithDisplay() self.videoconvert = Gst.ElementFactory.make('videoconvert', None) self.grabbersrc = ShmSrc(socket, Gst.Caps.from_string('video/x-raw,width=1280,height=720,framerate=25/1,format=RGBx')) # Add elements to pipeline self.pipeline.add(self.grabbersrc) self.pipeline.add(self.videoconvert) self.pipeline.add(self.mixdisplay) self.grabbersrc.link(self.videoconvert) self.videoconvert.link(self.mixdisplay) def run(self): self.pipeline.set_state(Gst.State.PAUSED) time.sleep(0.5) self.pipeline.set_state(Gst.State.PLAYING) self.mainloop.run() def kill(self): self.pipeline.set_state(Gst.State.NULL) self.mainloop.quit() def on_eos(self, bus, msg): print('on_eos()') #self.kill() def on_error(self, bus, msg): print('on_error():', msg.parse_error()) #self.kill() example = Example() example.run()