<html><head></head><body><div style="color:#000; background-color:#fff; font-family:lucida console, sans-serif;font-size:13px"><div id="yui_3_16_0_ym19_1_1505823370452_36983">About not receiving messages:</div><div id="yui_3_16_0_ym19_1_1505823370452_36984"><br></div><div id="yui_3_16_0_ym19_1_1505823370452_36985">You are not showing how you instantiate GstWidget and getting everything up and running.</div><div id="yui_3_16_0_ym19_1_1505823370452_37212">So from your code (as share), you are missing a main loop.</div><div id="yui_3_16_0_ym19_1_1505823370452_37213">You are also missing some important initialization steps.</div><pre style="" id="yui_3_16_0_ym19_1_1505823370452_37083"><code id="yui_3_16_0_ym19_1_1505823370452_37084"><span id="yui_3_16_0_ym19_1_1505823370452_37085">gobject</span><span id="yui_3_16_0_ym19_1_1505823370452_37086">.</span><span id="yui_3_16_0_ym19_1_1505823370452_37087">threads_init</span><span id="yui_3_16_0_ym19_1_1505823370452_37088">()<br>Gst.init(None)<br><br>Googling "gstreamer python tkinter" brings loads of examples with the missing parts.<br></span></code></pre><div id="yui_3_16_0_ym19_1_1505823370452_37248"><span></span></div> <div class="qtdSeparateBR"><br><br></div><div class="yahoo_quoted" style="display: block;"> <div style="font-family: lucida console, sans-serif; font-size: 13px;"> <div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 16px;"> <div dir="ltr"><font face="Arial" size="2"> Le Mardi 19 septembre 2017 15h00, WisdomPill <anas.el.amraoui@live.com> a écrit :<br></font></div>  <br><br> <div class="y_msg_container"><div dir="ltr">I have Tkinter application with some gstreamer pipelines to display different<br></div><div dir="ltr">streams and I'd like to detect when one of the pipelines loses connection. I<br></div><div dir="ltr">tried with bus messages but it seems to me that it doesn't post the message<br></div><div dir="ltr">at all. I created a widget to manage the gstreamer logic and the code for<br></div><div dir="ltr">the widget is the following.<br></div><div dir="ltr"><br></div><div dir="ltr">    from tkinter.ttk import Widget<br></div><div dir="ltr">    <br></div><div dir="ltr">    import gi<br></div><div dir="ltr">    <br></div><div dir="ltr">    # Needed for set_window_handle():<br></div><div dir="ltr">    gi.require_version('GstVideo', '1.0')<br></div><div dir="ltr">    gi.require_version('Gst', '1.0')<br></div><div dir="ltr">    from gi.repository import Gst, GstVideo<br></div><div dir="ltr">    <br></div><div dir="ltr">    <br></div><div dir="ltr">    class GstWidget(Widget):<br></div><div dir="ltr">        def __init__(self, gst_launch_string, x, y, width, height,<br></div><div dir="ltr">master=None, **kw):<br></div><div dir="ltr">            super(GstWidget, self).__init__(master, 'frame', **kw)<br></div><div dir="ltr">    <br></div><div dir="ltr">            self.place(x=x, y=y, width=width, height=height)<br></div><div dir="ltr">    <br></div><div dir="ltr">            self.frame_id = self.winfo_id()<br></div><div dir="ltr">    <br></div><div dir="ltr">            self.player = Gst.parse_launch(gst_launch_string)<br></div><div dir="ltr">            self.player.set_state(Gst.State.PLAYING)<br></div><div dir="ltr">    <br></div><div dir="ltr">            self.bus = self.player.get_bus()<br></div><div dir="ltr">            self.bus.add_signal_watch()<br></div><div dir="ltr">            self.bus.connect('message::error', self.on_error)<br></div><div dir="ltr">            self.bus.connect('message::state-changed',<br></div><div dir="ltr">self.on_status_changed)<br></div><div dir="ltr">            self.bus.connect('message::eos', self.on_eos)<br></div><div dir="ltr">            self.bus.connect('message::info', self.on_info)<br></div><div dir="ltr">            self.bus.enable_sync_message_emission()<br></div><div dir="ltr">            self.bus.connect('sync-message::element', self.set_frame_handle)<br></div><div dir="ltr">    <br></div><div dir="ltr">        def on_status_changed(self, bus, message):<br></div><div dir="ltr">            print('status_changed message -> {}'.format(message))<br></div><div dir="ltr">    <br></div><div dir="ltr">        def on_eos(self, bus, message):<br></div><div dir="ltr">            print('eos message -> {}'.format(message))<br></div><div dir="ltr">    <br></div><div dir="ltr">        def on_info(self, bus, message):<br></div><div dir="ltr">            print('info message -> {}'.format(message))<br></div><div dir="ltr">    <br></div><div dir="ltr">        def on_error(self, bus, message):<br></div><div dir="ltr">            print('error message -> {}'.format(message.parse_error()))<br></div><div dir="ltr">    <br></div><div dir="ltr">        def play(self):<br></div><div dir="ltr">            print('Current state of my pipeline is<br></div><div dir="ltr">{}'.format(self.player.current_state))<br></div><div dir="ltr">            print('setting pipeline state to playing')<br></div><div dir="ltr">            self.player.set_state(Gst.State.PLAYING)<br></div><div dir="ltr">    <br></div><div dir="ltr">        def close(self):<br></div><div dir="ltr">            self.player.set_state(Gst.State.NULL)<br></div><div dir="ltr">    <br></div><div dir="ltr">        def is_playing(self):<br></div><div dir="ltr">            print('\t\t{}'.format(self.player.current_state))<br></div><div dir="ltr">            return self.player.current_state is not Gst.State.PLAYING<br></div><div dir="ltr">    <br></div><div dir="ltr">        def set_frame_handle(self, bus, message):<br></div><div dir="ltr">            if message.get_structure().get_name() ==<br></div><div dir="ltr">'prepare-window-handle':<br></div><div dir="ltr">                frame = message.src<br></div><div dir="ltr">                frame.set_property('force-aspect-ratio', True)<br></div><div dir="ltr">                frame.set_window_handle(self.frame_id)<br></div><div dir="ltr"><br></div><div dir="ltr">Can anyone point to me where I'm wrong?<br></div><div dir="ltr">I've put breakpoints to all events and also it's not printing anything from<br></div><div dir="ltr">the events that I'd like to watch.<br></div><div dir="ltr">And also can you point me if there's any way to retry to connect the<br></div><div dir="ltr">pipeline on a lost connection?<br></div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr"><br></div><div dir="ltr">--<br></div><div dir="ltr">Sent from: <a href="http://gstreamer-devel.966125.n4.nabble.com/" target="_blank">http://gstreamer-devel.966125.n4.nabble.com/</a><br></div><div dir="ltr">_______________________________________________<br></div><div dir="ltr">gstreamer-devel mailing list<br></div><div dir="ltr"><a ymailto="mailto:gstreamer-devel@lists.freedesktop.org" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a><br></div><div dir="ltr"><a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" target="_blank">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br></div><br><br></div>  </div> </div>  </div></div></body></html>