[gst-devel] Implementing support for Apple HTTP Live Streaming...
Bastien Nocera
hadess at hadess.net
Wed Jun 9 22:43:26 CEST 2010
On Wed, 2010-06-09 at 11:53 -0700, Michael Smith wrote:
> On Wed, Jun 9, 2010 at 10:30 AM, Stephen Buck <stephenbuck at mac.com> wrote:
> > I'm currently implementing a GStreamer plugin to handle video playback using Apple's HTTP Live Streaming protocol (http://en.wikipedia.org/wiki/HTTP_Live_Streaming), which is used by the iPhone and iPad, and need some advice on the best way to proceed. The protocol works roughly like this:
>
> Here's a rough outline of how I'd go about implementing this:
>
> Implement an element called: applehttplivestreamingsrc.
>
> This will be a bin, with a single source pad. Conceptually this is a
> little similar to rtspsrc - that's a bin that has source pads (though
> it has multiple source pads).
>
> It'll have a property for the URI to the m3u file (and later other
> things you might need to configure).
>
> When it starts up, it'll fetch the m3u file. Probably best done by
> internally instantiating an http uri handler element, and getting the
> data from that - that way you don't tie it to souphttpsrc.
>
> Then it can instantiate more http uri handlers, to get the actual
> MPEGTS data. The first of these will be hooked up to the bin's src pad
> (which is a ghost pad).
>
> On receiving EOS on the http source, it'll switch out the http source
> for the next source, and not let the EOS through. You may also need to
> do some mangling of other events, like new segments? Can use event
> probes for this, probably.
>
> Later, you might add:
> - pre-fetching the next URI, and buffering (probably using a queue
> element), so that at segment boundaries you don't stall while waiting
> for the next connection to start up.
> - Re-fetching the m3u8 file when required for live streams.
That shouldn't be needed.
> - Making your source bin implement the uri handler interface, with
> some custom protocol, so you'd be able to do something like:
> gst-launch playbin2 uri=applelivehttp://server/mystream.m3u8
Gross. It already has a specific mime-type, and should be pretty easy to
add a typefinder for (check shared-mime-info for some details).
> Hope that helps a bit - though it doesn't directly answer your
> questions, I think this design will work a lot better that what you
> have currently.
I'll just add that Marc-André was looking at implementing this on IRC as
well.
Cheers
More information about the gstreamer-devel
mailing list