-
Notifications
You must be signed in to change notification settings - Fork 57
Model seekable range for a MediaSource with finite duration #369
Description
To my understanding the aim of the HTMLMediaElement seekable property is to model the seekability of the current source.
The
seekableattribute must return a new static normalizedTimeRangesobject that represents the ranges of the media resource, if any, that the user agent is able to seek to, at the time the attribute is evaluated.
In the context of MSE, seekable returns a time range from time zero to the MediaSource's duration if the duration is finite. Otherwise, if duration is Infinity, seekable returns the internal live seekable range property. (link: https://w3c.github.io/media-source/#htmlmediaelement-extensions-seekable)
There are cases where a finite duration does not mean time 0 is seekable. Sometimes a livestream is up for so long the start of the stream is no longer available when the stream ends. For example, our event streams (concerts etc.) sometimes overrun the 25H capacity we keep on or CDNs. To seek into that range would trigger a player error. Despite this, the seekable property always starts at 0 if the duration of the stream is finite (Section 10.1, step 3). Calling endOfStream() will result in a finite duration (see step 3 of the end of stream algorithm). Hence, it is not possible to model the availability of the livestream using the seekable property once the stream has ended. This leaves JS media player implementers with two choices:
- Ignore
HTMLMediaElement'sseekableproperty and implement their own seekability model. - Ignore
HTMLMediaElement'sendedproperty and implement their own "ended" model.
All JS media players I've surveyed chose option 1 and implement their own seekability model (e.g., in dash.js).