gstreamer, Audio/Video abspielen
Verfasst: Dienstag 25. Dezember 2018, 22:50
Hallo Allerseits,
ich versuche mich gerade in die GStreamer Python Bindings einzuarbeiten. Video alleine kann ich schon abspielen, aber sobald ich noch Audio dazu tun will klappt es nicht mehr. Es wird zwar das Videofenster angezeigt, bleibt aber beim ersten Frame stehen.
Verwende Python3 mit gstreamer 1.14 unter Fedora. Hier ist mein Code:
Habt ihr eine Idee wo das Problem liegt?
Grüße
Jonathan
ich versuche mich gerade in die GStreamer Python Bindings einzuarbeiten. Video alleine kann ich schon abspielen, aber sobald ich noch Audio dazu tun will klappt es nicht mehr. Es wird zwar das Videofenster angezeigt, bleibt aber beim ersten Frame stehen.
Verwende Python3 mit gstreamer 1.14 unter Fedora. Hier ist mein Code:
Code: Alles auswählen
#!/usr/bin/env python3
import gi
gi.require_version('Gst', '1.0')
gi.require_version('GLib', '2.0')
from gi.repository import GLib, Gst
Gst.debug_set_active(True)
Gst.debug_set_default_threshold(3)
def on_new_decoded_pad(dbin, pad):
type = pad.query_caps(None).to_string()
decode = pad.get_parent()
pipeline = decode.get_parent()
if type.startswith("video"):
video_queue = pipeline.get_by_name("video_queue")
decode.link(video_queue)
print("linked video")
if type.startswith("audio"):
audio_queue = pipeline.get_by_name("audio_queue")
decode.link(audio_queue)
print("linked audo")
def main():
Gst.init(None)
pipe = Gst.Pipeline.new('pipleline')
src = Gst.ElementFactory.make('filesrc', "src")
decode = Gst.ElementFactory.make('decodebin', 'decode')
video_queue = Gst.ElementFactory.make('queue', 'video_queue')
video_sink = Gst.ElementFactory.make('autovideosink', 'video_sink')
audio_queue = Gst.ElementFactory.make('queue', 'audio_queue')
audio_convert = Gst.ElementFactory.make('audioconvert', 'audio_convert')
audio_sink = Gst.ElementFactory.make('autovideosink', 'audio_sink')
src.set_property('location', 'voice.mp4')
video_sink.set_property('sync', 'true')
audio_sink.set_property('sync', 'true')
pipe.add(src)
pipe.add(decode)
pipe.add(video_queue)
pipe.add(video_sink)
pipe.add(audio_queue)
pipe.add(audio_convert)
pipe.add(audio_sink)
src.link(decode)
video_queue.link(video_sink)
audio_queue.link(audio_convert)
audio_convert.link(audio_sink)
decode.connect('pad-added', on_new_decoded_pad)
loop = GLib.MainLoop()
pipe.set_state(Gst.State.PLAYING)
loop.run()
# cleanup
pipe.set_state(Gst.State.NULL)
if __name__ == '__main__':
main()
Grüße
Jonathan