add example gst.py
This commit is contained in:
49
gst.py
Normal file
49
gst.py
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
import gi
|
||||||
|
gi.require_version('Gst', '1.0')
|
||||||
|
from gi.repository import Gst, GLib
|
||||||
|
|
||||||
|
# Initialize GStreamer
|
||||||
|
Gst.init(None)
|
||||||
|
|
||||||
|
# Define the pipeline
|
||||||
|
pipeline = Gst.parse_launch(
|
||||||
|
"v4l2src device=/dev/video0 ! "
|
||||||
|
"video/x-raw, format=GRAY16_LE, width=358, height=288, framerate=30/1 ! "
|
||||||
|
"videoconvert ! "
|
||||||
|
"x264enc bitrate=500 speed-preset=ultrafast tune=zerolatency ! "
|
||||||
|
"tee name=t "
|
||||||
|
"t. ! queue ! "
|
||||||
|
"hlsdemux ! "
|
||||||
|
"hlssink playlist-root=http://example.com/live location=/var/www/html/live/segment%05d.ts playlist-location=/var/www/html/live/playlist.m3u8 "
|
||||||
|
"t. ! queue ! "
|
||||||
|
"filesink location=/path/to/save/output.h264"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Start playing
|
||||||
|
pipeline.set_state(Gst.State.PLAYING)
|
||||||
|
|
||||||
|
# Wait until error or EOS
|
||||||
|
bus = pipeline.get_bus()
|
||||||
|
|
||||||
|
# Error handling
|
||||||
|
def on_message(bus, message, loop):
|
||||||
|
mtype = message.type
|
||||||
|
if mtype == Gst.MessageType.ERROR:
|
||||||
|
err, debug = message.parse_error()
|
||||||
|
print("Error: %s" % err, debug)
|
||||||
|
loop.quit()
|
||||||
|
elif mtype == Gst.MessageType.EOS:
|
||||||
|
print("End of stream")
|
||||||
|
loop.quit()
|
||||||
|
|
||||||
|
loop = GLib.MainLoop()
|
||||||
|
bus.add_signal_watch()
|
||||||
|
bus.connect("message", on_message, loop)
|
||||||
|
|
||||||
|
try:
|
||||||
|
loop.run()
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# Free resources
|
||||||
|
pipeline.set_state(Gst.State.NULL)
|
||||||
Reference in New Issue
Block a user