<div dir="ltr"><p dir="auto">I am new to GStreamer and I have created a small example where I am recording the webcam and used app sink to get the sample but when I try to stop the pipeline by setting its state to null and sending EOS event, my bus callback function never gets called for the EOS. And because of this memory leaks</p>
<p dir="auto">Guys, Please help me</p><p dir="auto"><br></p><p dir="auto">import gi
import time
import threading</p><p dir="auto">gi.require_version('Gst', '1.0')
gi.require_version('Gtk', '3.0')
gi.require_version('GstApp', '1.0')</p><p dir="auto">from gi.repository import GObject, Gst, Gtk, GstApp
import signal</p><p dir="auto">Gst.init(None)</p><p dir="auto">



</p><p dir="auto">class Main: </p><p dir="auto">shutdown = False</p><pre class="gmail-code gmail-highlight" lang="plaintext"><font face="arial, sans-serif"><span id="gmail-LC1" class="gmail-line" lang="plaintext">def __init__(self):</span>
<span id="gmail-LC2" class="gmail-line" lang="plaintext">    signal.signal(signal.SIGINT, self.keyboardInterruptHandler)</span>
<span id="gmail-LC3" class="gmail-line" lang="plaintext"></span>
<span id="gmail-LC4" class="gmail-line" lang="plaintext">    self._pipeline = Gst.parse_launch("avfvideosrc </span>
<span id="gmail-LC5" class="gmail-line" lang="plaintext">    name=avfvideosrc ! x264enc name=x264enc ! appsink </span>
<span id="gmail-LC6" class="gmail-line" lang="plaintext">    name=appsink max-buffers=1 drop=false sync=false emit- </span>
<span id="gmail-LC7" class="gmail-line" lang="plaintext">    signals=true wait-on-eos=false")</span>
<span id="gmail-LC8" class="gmail-line" lang="plaintext">    bus = self._pipeline.get_bus()</span>
<span id="gmail-LC9" class="gmail-line" lang="plaintext">    bus.add_signal_watch()</span>
<span id="gmail-LC10" class="gmail-line" lang="plaintext">    bus.connect("message::eos", self._on_eos_from_sink_pipeline)</span>
<span id="gmail-LC11" class="gmail-line" lang="plaintext">    bus.connect("message", self.on_status_changed)</span>
<span id="gmail-LC12" class="gmail-line" lang="plaintext">    appsink = self._pipeline.get_by_name('appsink')</span>
<span id="gmail-LC13" class="gmail-line" lang="plaintext">    appsink.connect('new-sample', self.on_new_sample)</span>
<span id="gmail-LC14" class="gmail-line" lang="plaintext">    appsink.connect('eos', self.eos)</span>
<span id="gmail-LC15" class="gmail-line" lang="plaintext"></span>
<span id="gmail-LC16" class="gmail-line" lang="plaintext">    #bus.connect('message', self.on_status_changed)</span>
<span id="gmail-LC17" class="gmail-line" lang="plaintext">    self._pipeline.set_state(Gst.State.PLAYING)</span>
<span id="gmail-LC18" class="gmail-line" lang="plaintext"></span>
<span id="gmail-LC19" class="gmail-line" lang="plaintext">def on_new_sample(self, appsink):</span>
<span id="gmail-LC20" class="gmail-line" lang="plaintext">    return Gst.FlowReturn.OK</span>
<span id="gmail-LC21" class="gmail-line" lang="plaintext"></span>
<span id="gmail-LC22" class="gmail-line" lang="plaintext">def _on_eos_from_sink_pipeline(self, _bus, _message):</span>
<span id="gmail-LC23" class="gmail-line" lang="plaintext">    print("Got EOS from sink pipeline")</span>
<span id="gmail-LC24" class="gmail-line" lang="plaintext">    exit()</span>
<span id="gmail-LC25" class="gmail-line" lang="plaintext"></span>
<span id="gmail-LC26" class="gmail-line" lang="plaintext">def eos(self, sink):</span>
<span id="gmail-LC27" class="gmail-line" lang="plaintext">    print("SINK EOS")</span>
<span id="gmail-LC28" class="gmail-line" lang="plaintext">    return True</span>
<span id="gmail-LC29" class="gmail-line" lang="plaintext"></span>
<span id="gmail-LC30" class="gmail-line" lang="plaintext">def on_status_changed(self, bus, message):</span>
<span id="gmail-LC31" class="gmail-line" lang="plaintext">    print('Status: ', message.type)</span>
<span id="gmail-LC32" class="gmail-line" lang="plaintext">    print('Object: ', message.src)</span>
<span id="gmail-LC33" class="gmail-line" lang="plaintext">    print('Parsed Message: ', message.parse_state_changed())</span>
<span id="gmail-LC34" class="gmail-line" lang="plaintext"></span>
<span id="gmail-LC35" class="gmail-line" lang="plaintext">def keyboardInterruptHandler(self,signal, frame):</span>
<span id="gmail-LC36" class="gmail-line" lang="plaintext">    print("KeyboardInterrupt (ID: {}) has been caught. Cleaning </span>
<span id="gmail-LC37" class="gmail-line" lang="plaintext">    up...".format(signal))</span>
<span id="gmail-LC38" class="gmail-line" lang="plaintext">    self.shutdown = True</span>
<span id="gmail-LC39" class="gmail-line" lang="plaintext">    self.stopFetching()</span>
<span id="gmail-LC40" class="gmail-line" lang="plaintext"></span>
<span id="gmail-LC41" class="gmail-line" lang="plaintext">def stopFetching(self):</span>
<span id="gmail-LC42" class="gmail-line" lang="plaintext">    print("AT THE START OF STOP FETCHING")       </span>
<span id="gmail-LC43" class="gmail-line" lang="plaintext">    self._pipeline.set_state(Gst.State.NULL)</span>
<span id="gmail-LC44" class="gmail-line" lang="plaintext">    self._pipeline.send_event(Gst.Event.new_eos())</span>
<span id="gmail-LC45" class="gmail-line" lang="plaintext">    print("AT THE END OF STOP FETCHING")</span>
</font></pre><pre class="gmail-code gmail-highlight" lang="plaintext"><font face="arial, sans-serif">start = Main()
Gtk.main()`</font></pre>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div style="color:rgb(136,136,136);font-size:12.8px"><div><font face="arial, helvetica, sans-serif" color="#0b5394"><font size="2"><b>Thanks & Regards</b></font><font size="1" style="font-weight:bold">,</font></font></div><div><font face="arial, helvetica, sans-serif"><font size="1" color="#0b5394" style="font-weight:bold"><br></font></font></div></div><div><font color="#0b5394" face="arial, helvetica, sans-serif"><b>Ravi Modha</b></font></div><div style="color:rgb(136,136,136)"><font color="#0b5394"><font face="arial, helvetica, sans-serif"><b style="font-size:x-small"><font color="#0b5394"><a href="mailto:ravi.modha@tudip.com" style="color:rgb(17,85,204)" target="_blank">ravi.modha@tudip.com</a></font> | </b><b><span style="font-size:xx-small">Skype:</span><font size="1"> </font></b></font></font><b style="color:rgb(11,83,148);font-family:arial,helvetica,sans-serif;font-size:x-small"><font color="#0b5394"><a href="mailto:ravi.modha@tudip.com" style="color:rgb(17,85,204)" target="_blank">ravi.modha@tudip.com</a></font></b></div><div style="color:rgb(136,136,136)"><font color="#0b5394"><font face="arial, helvetica, sans-serif"><b><font size="1"><br></font></b></font></font></div><div style="color:rgb(136,136,136);font-size:12.8px"><a href="https://tudip.com/" style="color:rgb(17,85,204);font-size:12.8px" target="_blank"><img src="https://drive.google.com/a/tudip.com/uc?id=1zJSxP1wMlTI9XJDYbJGWCkGHmI5b-YcL&export=download"></a><span style="font-size:12.8px"> </span><a href="https://in.linkedin.com/company/tudip-technologies-pvt-ltd-" style="color:rgb(17,85,204);font-size:12.8px" target="_blank"><img src="https://drive.google.com/a/tudip.com/uc?id=1bePNWXohkGCJvWAIXBS28IrhzeOdr-EM&export=download"></a><a href="https://clutch.co/profile/tudip-technologies" style="color:rgb(17,85,204);font-size:12.8px" target="_blank"><img src="https://drive.google.com/a/tudip.com/uc?id=1x29SoNoRpMwAqn0F88BtoDNmYWzp47_D&export=download"></a><a href="https://www.goodfirms.co/companies/view/4439/tudip-technologies-pvt-ltd" style="color:rgb(17,85,204);font-size:12.8px" target="_blank"><img src="https://drive.google.com/a/tudip.com/uc?id=1jd6xtL-FoNWGuQH6U78g02hyYKh4-0Wa&export=download"></a><span style="font-size:12.8px"> </span><a href="https://www.facebook.com/TudipTechnologies" style="color:rgb(17,85,204);font-size:12.8px" target="_blank"><img src="https://drive.google.com/a/tudip.com/uc?id=1X-lj_gJC1T7qEB1uYIw2GivNd8F_Eb0C&export=download"></a><span style="font-size:12.8px"> </span><a href="https://twitter.com/TudipTech" style="color:rgb(17,85,204);font-size:12.8px" target="_blank"><img src="https://drive.google.com/a/tudip.com/uc?id=1YGDJSRzIZOvM0VZXzhokH-uGcw9umlH0&export=download"></a><span style="font-size:12.8px"> </span><a href="https://www.youtube.com/channel/UCoNPz2mbzNF_AZhLQEzuWCg" style="color:rgb(17,85,204);font-size:12.8px" target="_blank"><img src="https://drive.google.com/a/tudip.com/uc?id=12WOVgEFKgxD86LKWFaZN7rJF9VxKV3zH&export=download"></a></div><div style="color:rgb(136,136,136);font-size:12.8px"><font size="1" style="color:rgb(11,83,148);font-weight:bold"><font style="color:rgb(17,85,204)"><a href="https://tudip.com/" style="color:rgb(17,85,204)" target="_blank">www.tudip.com</a></font> </font><font size="1" style="color:rgb(11,83,148);font-weight:bold">|</font><font size="1" style="color:rgb(11,83,148);font-weight:bold"> <font color="#0b5394"><a href="https://tudip.com/tudip-technologies-in-news/" style="color:rgb(17,85,204)" target="_blank"><font color="#0b5394">Tudip in News</font></a> </font></font><br></div><div style="color:rgb(136,136,136);font-size:12.8px"><span style="font-weight:bold;font-family:arial;font-size:x-small"><a href="callto:+91%2020%204674%200881" style="color:rgb(17,85,204)" target="_blank"><font color="#0b5394">+91 20 4674 0881</font></a><font color="#0b5394"> | </font><a href="callto:+1%20408%20216%208162" style="color:rgb(17,85,204)" target="_blank"><font color="#0b5394">+1 408 216 8162</font></a></span></div></div></div></div>