AW: GStreamer (1.14) Pipeline in Python3
Jonathan Baecker
jonbae77 at gmail.com
Wed Dec 26 14:35:50 UTC 2018
On 26.12.18 14:58, Bernhard Graaf wrote:
>
> Hi,
>
> You use the wrong audiosink:
>
> audio_sink = Gst.ElementFactory.make('autovideosink', 'audio_sink')
> àautoaudiosink?
>
> Bernhard
>
Obs... How stupid is that - yes you are right! That was the problem.
Maybe I copy that line and forgot to change the sink...
Thank you for pointing this out!
Jonathan
> ------------------------------------------------------------------------
>
> *Von:*gstreamer-devel
> [mailto:gstreamer-devel-bounces at lists.freedesktop.org] *Im Auftrag von
> *Jonathan Baecker
> *Gesendet:* Mittwoch, 26. Dezember 2018 13:22
> *An:* gstreamer-devel at lists.freedesktop.org
> *Betreff:* GStreamer (1.14) Pipeline in Python3
>
> Hello,
>
> I try to understand the way Python and gstreamer works together. I'm
> able to build a pipeline for only video and that plays just fine, but
> when I add audio my pipeline stops by the first frame and put this to
> screen.
>
> Can you tell me, what is wrong with my code here?:
>
> #!/usr/bin/env python3
>
> import gi
> gi.require_version('Gst', '1.0')
> gi.require_version('GLib', '2.0')
> from gi.repository import GLib, Gst
>
> # mode debugging infos
> Gst.debug_set_active(True)
> Gst.debug_set_default_threshold(3)
>
>
> # callback link pads
> 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 audio")
>
>
> def main():
> Gst.init(None)
>
> # create new pipeline
> pipe = Gst.Pipeline.new('pipleline')
>
> # add source and decoder
> src = Gst.ElementFactory.make('filesrc', "src")
> decode = Gst.ElementFactory.make('decodebin', 'decode')
>
> # video queue and sink
> video_queue = Gst.ElementFactory.make('queue', 'video_queue')
> video_sink = Gst.ElementFactory.make('autovideosink',
> 'video_sink')
>
> # audio queue and 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')
>
> # set some properties
> src.set_property('location', 'test.mp4')
> video_sink.set_property('sync', 'true')
> audio_sink.set_property('sync', 'true')
>
> # create pipeline
> 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)
>
> # link elements
> src.link(decode)
> video_queue.link(video_sink)
> audio_queue.link(audio_convert)
> audio_convert.link(audio_sink)
>
> # link decoder to coresponding queue
> decode.connect('pad-added', on_new_decoded_pad)
>
> loop = GLib.MainLoop()
>
> # start pipeline in play mode
> pipe.set_state(Gst.State.PLAYING)
> loop.run()
>
> # cleanup
> pipe.set_state(Gst.State.NULL)
>
>
> if __name__ == '__main__':
> main()
>
> I hope it is ok, to post so much code here, when not I can post next
> time a gist link.
>
> Regards
>
> Jonathan
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20181226/c84ef524/attachment-0001.html>
More information about the gstreamer-devel
mailing list