[foms] WebM Manifest
Baptiste Coudurier
baptiste at hulu.com
Fri Mar 18 16:10:03 PDT 2011
Hi guys,
On 03/17/2011 02:24 PM, Mark Watson wrote:
>
> On Mar 17, 2011, at 2:10 PM, Steve Lhomme wrote:
>
>> On Thu, Mar 17, 2011 at 4:59 PM, Mark Watson <watsonm at netflix.com>
>> wrote:
>>> The problem is that adaptive streaming is more complex than
>>> simply concatenating a bunch of resources found at URLs
>>> advertised in a manifest. Firstly, you need reasonably small
>>> granularity in terms of switch points. 2s is good. 10s is too
>>> long. Next if you had a separate file for each 2s chunk, then
>>> you have an unmanageably large number of files (it would be ~25
>>> billion for our content library). The solution in DASH (required
>>> in the "Basic On Demand" profile) is to store the content as a
>>> single file for each bitrate. At the start of a file is an index
>>> giving the time-to-byte-range mapping for the 2s fragments (2s
>>> is an example - the spec doesn't constrain you). This is for
>>> on-demand, not live, btw. The index is in the file, binary
>>> coded, to keep it compact and thereby keep startup time low. If
>>> it was in the XML Manifest it would be huge. To construct byte
>>> range requests you need to read and parse this index. I'm not
>>> sure Javascript has good tools for efficiently handling &
>>> parsing binary data yet.
>>
>> Would it be possible in DASH to have no pre-defined fragment
>> duration ?
>
> Absolutely. When I say 2s this is just an example. DASH doesn't
> require a specific duration and doesn't even require that all the
> fragments in a file have the same duration.
>
>> If you load the index of all the available streams on startup, you
>> have your seek points with time. Given it's the same source and
>> probably the same codec/encoder, there's a very good chance the
>> keyframes, and thus the switch points are exactly in the same
>> place.
>
> It's a good idea to encode the content so that the keyframes are in
> the same place in each version, but you don't get this unless you
> explicitly prepare the content this way. Simplest case if you have
> fixed GoP size (e.g. 60 frames) then you'll have this alignment.
In my experience, you also have to make sure to disable the scene change
detection.
> You can flag a set of streaming as having this kind of alignment in
> a DASH manifest, so clients that require this alignment know if they
> are going to be able to switch seamlessly.
>
>> That would avoid forcing the encoder the extra fragmentation
>> constraint and use the available bandwidth more wisely (better end
>> user quality).
>
> Not sure I understand the bit about quality: do you mean that by
> allowing the encoder to choose key frame positions you get better
> quality. Yes. But then you do have to take care to ensure the
> different rate encodes pick the same keyframe positions. Without
> modification they won't do that. What I've seen in the past is
> running the highest bitrate encode first, getting a trace of the
> keyframe positions and then feeding that into the other encodes. You
> need a modified encoder that supports that.
In my experience, it is always better to let the encoder choose the
keyframe positions, especially at low bitrates (< 400k).
Also depending on the encoder, same resolution will output the same
keyframe positions.
Best regards.
--
Baptiste Coudurier
More information about the foms
mailing list