Gnolin and Python - Theora/Vorbis ogg video only creating one pad

Matt Veenstra matt at tribalmedia.com
Fri Feb 11 19:49:59 CET 2011


I worked my way through this and now have the basics working.  Here
are the 2 tricks and then plenty of details to get this working.

1. You must use 2 gnlfilesource with the same file and set the caps.
This makes sense.  I just missed this in the docs.
2. I was not able to get this to work if I put gnlfilesource in
gnlcomposition.  In this case I always failed in the linking of
elements and was not able to work around this.  I am not sure now when
to use gnlcomposition vs not.

Thanks,
Matt

On Fri, Feb 11, 2011 at 9:42 AM, Matt Veenstra <matt at tribalmedia.com> wrote:
> Hi,
>
> I use a gnlfilesource with an .ogv source file (theora/vorbis).  I
> only get one pad created when we start playing (the video pad), I
> never receive the audio pad added callback of the composition.
>
> I tried to add a "decodebin" and connect this to the composition or
> gnlfilesource without any luck.
>
> What am I missing to get both pads created?  A plain vorbis audio file
> works fine.  I receive no errors in the code.
>
> Here is the code.
>
> class Main:
>        def __init__(self):
>                self.mainloop = gobject.MainLoop()
>
>                # creating the pipeline
>                self.pipeline = gst.Pipeline("mypipeline")
>
>                # Create bus and connect several handlers
>                self.bus = self.pipeline.get_bus()
>                self.bus.add_signal_watch()
>                self.bus.connect('message::eos', self.OnEOS)
>                self.bus.connect('message::tag', self.OnTag)
>                self.bus.connect('message::error', self.OnError)
>
>                # creating a gnlcomposition
>                self.comp = gst.element_factory_make("gnlcomposition", "composition")
>                self.pipeline.add(self.comp)
>                self.comp.connect("pad-added", self.OnPad)
>
>                # create an audioconvert
>                self.audioconvert = gst.element_factory_make("audioconvert", "audioconvert")
>                self.pipeline.add(self.audioconvert)
>
>                # create an audioconvert
>                self.videoconvert = gst.element_factory_make("ffmpegcolorspace")
>                self.pipeline.add(self.videoconvert)
>
>                # create an fakesink
>                self.sink = gst.element_factory_make("fakesink", "fakesink")
>                self.pipeline.add(self.sink)
>
>                # create a gnlfilesource
>                self.stream1 = gst.element_factory_make("gnlfilesource", "stream1")
>                self.comp.add(self.stream1)
>
>                # set the gnlfilesource properties
>                self.stream1.set_property("location", "/transcoder/samples/video.ogv")
>                # self.stream1.set_property("location",
> "/transcoder/samples/Epoq-Lepidoptera.ogg")
>                self.stream1.set_property("start", 0 * gst..SECOND)
>                self.stream1.set_property("duration", 5 * gst.SECOND)
>                self.stream1.set_property("media-start", 10 * gst.SECOND)
>                self.stream1.set_property("media-duration", 5 * gst.SECOND)
>
>                self.pipeline.set_state(gst.STATE_PLAYING)
>                self.mainloop.run()
>
>
>        def OnPad(self, comp, pad):
>                aCaps = pad.get_caps()
>                aName = aCaps[0].get_name()
>                print "pad added!", aName
>
>                if aName == 'audio/x-raw-float' or aName == 'audio/x-raw-int':
>                        convpad = self.audioconvert.get_compatible_pad(pad, pad.get_caps())
>                        if not convpad.is_linked(): # Only link once
>                                print "linking audio pads"
>                                pad.link(convpad)
>                                self.audioconvert.link(self.mux)
>                elif aName == 'video/x-raw-yuv':
>                        convpad = self.videoconvert.get_compatible_pad(pad, pad.get_caps())
>                        if not convpad.is_linked(): # Only link once
>                                print "linking video pads"
>                                pad.link(convpad)
>                                self.videoconvert.link(self.sink)
>
>
> I am not sure this is the correct forum so please let me know if I
> should post elsewhere.
>
> Thanks,
> Matt
>
_______________________________________________
gstreamer-devel mailing list
gstreamer-devel at lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel



More information about the gstreamer-devel mailing list