write a python source plugin?
Sandino Flores Moreno
tigrux at gmail.com
Fri Jul 8 14:49:30 PDT 2011
Just out of curiosity:
Why python and not C or Vala?
On Thu, Jul 7, 2011 at 3:46 PM, Oleksandr Lavrushchenko
<kpykcb at gmail.com> wrote:
> Hi,
>
>> is it possible to use the python bindings to create a source plugin?
>
> just yesterday i faced with same question.
> And i don't know how, but at first i lost from view most obvious place of
> getting information, this is:
>
> - http://cgit.freedesktop.org/gstreamer/gst-python/tree/examples/filesrc.py
>
> But fortunately i found next few very helpful links:
>
> - http://guillaume.segu.in/blog/code/223/useful-paralellism-with-python/
> - http://nullege.com/codes/search/gst.PushSrc
> - http://svn.annodex.net/keystroke/trunk/textsrc.py
>
> So basically you have to inherit from BaseSrc or PushSrc and implement
> do_create method. If your source support seeking than few other also.
>
> On debian testing/unstable PushSrc seems not available in python-gst package
> so i inherited BaseSrc.
>
>> I imagine something closely related to the imagefreeze plugin:
>> - behave like imagefreeze most of the time (serve static image at
>> specified fps)
>
> Can't say something here, you may be need to give close attention to clocks
> in gstreamer to source at specific fps. Will be glad to hear how you do this
> if you will figure this out,
>
>> - change image whenever new image arrives from somewhere else within
>> my (python) code.
>
> You just need to update you source buffer passed through do_create function.
>
> Here is my code to push text string through udp (this like a little bit
> simplified version of filesrc example).
>
> #!/usr/bin/env python
> """ Source buf """
> # -*- Mode: Python -*-
> # vi:si:et:sw=4:sts=4:ts=4
> #
>
> import gobject
> gobject.threads_init()
>
> import pygst
> pygst.require('0.10')
> import gst
>
> class Bufsrc(gst.BaseSrc):
> """ Push text """
> #here we register our plugin details
> __gstdetails__ = (
> "bufsrc test plugin",
> "bufsrc.py",
> "Source element that create a buffer",
> "Oleksandr Lavrushchenko <____ at gmail.com>")
>
> _src_template = gst.PadTemplate ("src",
> gst.PAD_SRC,
> gst.PAD_ALWAYS,
> gst.caps_new_any ())
>
> __gsttemplates__ = (_src_template,)
>
> def __init__ (self, *args, **kwargs):
> gst.BaseSrc.__init__(self)
> gst.info('creating srcpad')
> self.src_pad = gst.Pad (self._src_template)
> self.src_pad.use_fixed_caps()
>
> #self.add_pad (self.src_pad)
>
> def do_create(self, offset, length):
> buf = gst.Buffer("data\n")
> buf.timestamp = 0
> buf.duration = pow(2, 63) -1
> return gst.FLOW_OK, buf
>
> # Register element class
> gobject.type_register(Bufsrc)
> gst.element_register(Bufsrc, 'bufsrc', gst.RANK_MARGINAL)
>
> sink = gst.element_factory_make("udpsink", "sink")
> sink.set_property("port", 5000)
> sink.set_property("host", "127.0.0.1")
>
> pusher = Bufsrc()
>
> player = gst.Pipeline("player")
> player.add(pusher, sink)
> gst.element_link_many(pusher2, sink)
>
> player.set_state(gst.STATE_PLAYING)
>
> gobject.MainLoop().run()
>
>
>
> _______________________________________________
> 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