Fixes some bug, probably?
[python-gstreamer-examples] / example1.py
index 3d944bad1c15fd039b8e7696331da2a3a1c88799..1d7cfa307ca1eef58ac1ce21ce5f8787c2bbc214 100755 (executable)
@@ -1,19 +1,22 @@
 #!/usr/bin/env python
-# This is a reworked version of the example from Jono Bacon's Python+Gstreamer
-# primer: http://www.jonobacon.org/2006/08/28/getting-started-with-gstreamer-with-python/
-# 
+# This is a reworked version gstreamer example 1 from Jono Bacon's Python and
+# Gstreamer primer:
+# http://www.jonobacon.org/2006/08/28/getting-started-with-gstreamer-with-python
+#
 # It uses Gstreamer 1.0, and replaces alsa with pulse for audio output, and
 # drops the use of the GTK main loop, since we're not bothered with a GUI
 # Info on porting python scripts to Gstreamer 1.0 can be found here:
 # https://wiki.ubuntu.com/Novacut/GStreamer1.0
 
-from gi.repository import Gst, GObject
+import gi, time, signal
+gi.require_version('Gst', '1.0')
+from gi.repository import Gst
 
 class Main:
   def __init__(self):
     # Initiate the pipeline
     Gst.init(None)
-    self.pipeline = Gst.Pipeline("mypipeline")
+    self.pipeline = Gst.Pipeline()
 
     # Add an audiotestsrc element to the pipeline
     self.audiotestsrc = Gst.ElementFactory.make("audiotestsrc", "audio")
@@ -29,7 +32,16 @@ class Main:
     # Set the pipeline to the playing state
     self.pipeline.set_state(Gst.State.PLAYING)
 
-# Create the pipelie and enter main loop, quit with ctrl+c
-start = Main()
-mainloop = GObject.MainLoop()
-mainloop.run()
+  # We want a graceful shutdown on CTRL+C
+  def quit(self, *args):
+    print("stopping")
+    exit(0)
+
+  # Trap SIGINT
+  signal.signal(signal.SIGINT, quit)
+
+# Create the pipeline and enter main loop, quit with ctrl+c
+
+Main()
+while True:
+    time.sleep(0.001)