[gst-devel] Getting started with gnonlin
Edward Hervey
bilboed at gmail.com
Fri Jan 6 03:21:24 CET 2006
Hi,
Nice to see more people using gnonlin :)
On 1/6/06, Dominique Würtz <housirer at gmx.de> wrote:
> I tried out the latest gnonlin (0.10.0.3) since I plan to use it for my
> project. I created a little Python script to to test its functionality.
> Unfortunately it wouldn't work. I think the pipeline gets stuck in the
> PREROLL state. The timeline source pad however is created.
> Here is the code:
I'll comment along the way:
>
> import gst
I suppose you only have gst-python >= 0.10 installed, otherwise you
should do the following before importing gst:
import pygst
pygst.require('0.10')
> import gobject
>
> def _timeline_new_pad_cb(self, pad):
> timeline.link(sink)
>
> sink = gst.element_factory_make("alsasink")
> timeline = gst.element_factory_make("gnltimeline")
> audiocomp = gst.element_factory_make("gnlcomposition")
>
> gnlsource = gst.element_factory_make("gnlfilesource")
> gnlsource.set_property("location", "foo.wav")
> gnlsource.set_property("media-start", 0L)
> gnlsource.set_property("media-duration", 100000L)
1000000 is one millisecond ! You'd be better off using the
gst.SECOND (or gst.MSECOND,...).
> gnlsource.set_property("start", 0L)
> gnlsource.set_property("duration", 100000L)
> audiocomp.add(gnlsource)
>
> audiocomp.set_property("media-start", 0L)
> audiocomp.set_property("media-duration", 100000L)
> audiocomp.set_property("start", 0L)
> audiocomp.set_property("duration", 100000L)
For the time being, gnlcomposition have the (media)[start|duration]
automatically set to it's contents (in this case it will be set to the
duration of you gnlsource).
>
> timeline.set_property("media-start", 0L)
> timeline.set_property("media-duration", 100000L)
> timeline.set_property("start", 0L)
> timeline.set_property("duration", 100000L)
> timeline.add(audiocomp)
I'm slapping myself really hard :( The gnltimeline and gnloperation
do nothing for the time being. In fact gnltimeline is going to go away
(with the gnlobject-0.10 way of working, you can just replace it with
a bin, if you really need that).
>
> timeline.connect("pad-added", _timeline_new_pad_cb)
>
> pipeline = gst.Pipeline()
> pipeline.add(timeline, sink)
Because of the previous comment, replace all mention of gnltimeline
with your audiocomp.
>
> pipeline.set_state(gst.STATE_PLAYING)
> gobject.MainLoop().run()
> pipeline.set_state(gst.STATE_NULL)
>
> Just a side note:
>
> This works: gst-launch filesrc location="foo.wav" ! decodebin ! alsasink
> While this won't: gst-launch gnlfilesrc location="foo.wav" ! decodebin !
> alsasink
The gnlfilesource contains decodebin within (it's it's purpose, just
give a location and (if needed) a caps). Also, the default values for
(media)[start|duration] are set to 0, so it will play for... 0
nanoseconds :)
>
> Any ideas why the pipeline won't play?
>
Try following all the instructions given above. Although with latest
cvs, there seems to be an issue, where the fakesink contained in
decodebin doesn't get removed. I'm having a look at it now.
Edward
>
>
> -------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
> for problems? Stop! Download the new AJAX search engine that makes
> searching your log files as easy as surfing the web. DOWNLOAD SPLUNK!
> http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
--
Edward Hervey
Junior developer / Fluendo S.L.
http://www.pitivi.org/
More information about the gstreamer-devel
mailing list