question how to add own customized element between source element and decodebin2 element when using playbin2

Edward Hervey bilboed at gmail.com
Tue Nov 13 23:24:06 PST 2012


Hi,

  summary: this issue doesn't require a queue to fix the issue.

  What version of GStreamer are you using ?

  The "crackling" is most likely due to clock skew happening, or data
stream getting corrupted.

  Depending on the version of GStreamer you are using and the bitrate
being used, you might want to increase the udpsrc socket buffer-size to
a bigger value (buffer-size property).
  Also note that there is a performance issue with the underlying system
being used by udpsrc (gio) which is currently being fixed. On some
systems it could cause packet drops (because we don't read out the data
from the socket fast enough).

   Edward

On Tue, 2012-11-13 at 21:09 +0100, Christophe Oosterlynck wrote:
> Tim-Philipp, thanks for your quick and helpful reply. I'm glad I asked
> here first before starting to implement something. I will try your
> suggestion.
> 
> 
> I'm also not sure if inserting a queue element right after the udp
> source is the right way to catch my problems with udp streaming. The
> actual problem I'm having is corrupted sound on playing a raw udp
> stream containing a transport stream consisting of H264 video and MPEG
> 1 layer 2 audio. The image is fine but the sound starts crackling
> after a while until it sometimes disappears completely until it plays
> fine again and repeats this in a cycle of 60 seconds.
> 
> 
> As there is no buffering for live sources in playbin2, I'm suspecting
> this to be a problem. Why is there no facility in playbin2 to delay
> playback of a udp stream a bit to buffer it and handle possible packet
> delays? 
> 
> 
> Best regards,
> 
> 
> Christophe
> 
> 
> On Tue, Nov 13, 2012 at 3:09 PM, Tim-Philipp Müller <t.i.m at zen.co.uk>
> wrote:
>         On Tue, 2012-11-13 at 05:40 -0800, Christophe Oosterlynck
>         wrote:
>         
>         > I'm looking to do the same thing. Right after the source, I
>         want to insert
>         > another element and let playbin2 do the rest.
>         >
>         > From what I see I have 2 possibilities:
>         > * react to "notify::source" signal, add the extra element to
>         the bin, link
>         > it to the source and let playbin2 continue
>         > * wait until playbin2 has finished constructing the whole
>         pipeline, unlink
>         > source and next element and insert extra element in between.
>         >
>         > Can I do one of these safely or shouldn't I fiddle with the
>         playbin2
>         > pipeline behind its back?
>         >
>         > What I want to achieve with this: buffer a live udp source.
>         > The buffering mechanism in playbin2 is not usable for live
>         sources as you
>         > cannot pause them. I want to insert a queue element right
>         behind the udpsrc
>         > element with min-threshold-bytes. This works when I create a
>         custom pipeline
>         > with gst-launch. If this is not the best way to handle this,
>         let me know.
>         > Nevertheless, I'm still interested in the answer to my
>         question on fiddling
>         > with the playbin2 pipeline.
>         
>         
>         You should not fiddle with playbin's pipeline, and certainly
>         not link
>         elements behind its back. It won't work. Even if it does work,
>         it might
>         stop working tomorrow. And we won't even feel bad for a second
>         if your
>         app breaks doing things like that ;)
>         
>         The only sane way to do things like this is to write your own
>         element,
>         which could be a GstBin subclass where you add some source and
>         whatever
>         additional elements you want and then create a ghost source
>         pad. You can
>         then register a new (or existing, if you must) URI protocol
>         for it, so
>         if you do playbin uri=fooudp://a.b.c.d:port it will plug your
>         bin.
>         
>         Or you could try to come up with API for playbin to add such a
>         thing,
>         but I think would need to be rather well-justified and deemed
>         interesting enough to be added.
>         
>         (What does your "routine" element do, "BCXA" ?)
>         
>          Cheers
>           -Tim
>         
>         _______________________________________________
>         gstreamer-devel mailing list
>         gstreamer-devel at lists.freedesktop.org
>         http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>         
> 
> 
> _______________________________________________
> 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