-
Notifications
You must be signed in to change notification settings - Fork 22
/
pipeline_with_parse_launch.py
58 lines (43 loc) · 1.49 KB
/
pipeline_with_parse_launch.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import traceback
import sys
import gi
gi.require_version('Gst', '1.0')
from gi.repository import Gst, GObject
# Initializes Gstreamer, it's variables, paths
Gst.init(sys.argv)
def on_message(bus, message, loop):
mtype = message.type
"""
Gstreamer Message Types and how to parse
https://lazka.github.io/pgi-docs/Gst-1.0/flags.html#Gst.MessageType
"""
if mtype == Gst.MessageType.EOS:
print("End of stream")
elif mtype == Gst.MessageType.ERROR:
err, debug = message.parse_error()
print(err, debug)
elif mtype == Gst.MessageType.WARNING:
err, debug = message.parse_warning()
print(err, debug)
return True
command = "videotestsrc num-buffers=50 ! gtksink"
# Gst.Pipeline https://lazka.github.io/pgi-docs/Gst-1.0/classes/Pipeline.html
# https://lazka.github.io/pgi-docs/Gst-1.0/functions.html#Gst.parse_launch
pipeline = Gst.parse_launch(command)
# https://lazka.github.io/pgi-docs/Gst-1.0/classes/Bus.html
bus = pipeline.get_bus()
# allow bus to emit messages to main thread
bus.add_signal_watch()
# Add handler to specific signal
# https://lazka.github.io/pgi-docs/GObject-2.0/classes/Object.html#GObject.Object.connect
bus.connect("message", on_message, None)
# Start pipeline
pipeline.set_state(Gst.State.PLAYING)
# Init GObject loop to handle Gstreamer Bus Events
loop = GObject.MainLoop()
try:
loop.run()
except:
traceback.print_exc()
# Stop Pipeline
pipeline.set_state(Gst.State.NULL)