GstBus not getting EOS Event

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

GstBus not getting EOS Event

ravi.modha

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

Guys, Please help me


import gi import time import threading

gi.require_version('Gst', '1.0') gi.require_version('Gtk', '3.0') gi.require_version('GstApp', '1.0')

from gi.repository import GObject, Gst, Gtk, GstApp import signal

Gst.init(None)

class Main: 

shutdown = False

def __init__(self):
    signal.signal(signal.SIGINT, self.keyboardInterruptHandler)

    self._pipeline = Gst.parse_launch("avfvideosrc 
    name=avfvideosrc ! x264enc name=x264enc ! appsink 
    name=appsink max-buffers=1 drop=false sync=false emit- 
    signals=true wait-on-eos=false")
    bus = self._pipeline.get_bus()
    bus.add_signal_watch()
    bus.connect("message::eos", self._on_eos_from_sink_pipeline)
    bus.connect("message", self.on_status_changed)
    appsink = self._pipeline.get_by_name('appsink')
    appsink.connect('new-sample', self.on_new_sample)
    appsink.connect('eos', self.eos)

    #bus.connect('message', self.on_status_changed)
    self._pipeline.set_state(Gst.State.PLAYING)

def on_new_sample(self, appsink):
    return Gst.FlowReturn.OK

def _on_eos_from_sink_pipeline(self, _bus, _message):
    print("Got EOS from sink pipeline")
    exit()

def eos(self, sink):
    print("SINK EOS")
    return True

def on_status_changed(self, bus, message):
    print('Status: ', message.type)
    print('Object: ', message.src)
    print('Parsed Message: ', message.parse_state_changed())

def keyboardInterruptHandler(self,signal, frame):
    print("KeyboardInterrupt (ID: {}) has been caught. Cleaning 
    up...".format(signal))
    self.shutdown = True
    self.stopFetching()

def stopFetching(self):
    print("AT THE START OF STOP FETCHING")       
    self._pipeline.set_state(Gst.State.NULL)
    self._pipeline.send_event(Gst.Event.new_eos())
    print("AT THE END OF STOP FETCHING")
start = Main()
Gtk.main()`
--
Thanks & Regards,

Ravi Modha

    
<a href="callto:+91%2020%204674%200881" style="color:rgb(17,85,204)" target="_blank">+91 20 4674 0881 | <a href="callto:+1%20408%20216%208162" style="color:rgb(17,85,204)" target="_blank">+1 408 216 8162

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel