To my understanding the aim of the HTMLMediaElement seekable property is to model the seekability of the current source.
The seekable attribute must return a new static normalized TimeRanges object 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's seekable property and implement their own seekability model.
- Ignore
HTMLMediaElement's ended property 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).
To my understanding the aim of the HTMLMediaElement
seekableproperty is to model the seekability of the current source.In the context of MSE,
seekablereturns a time range from time zero to theMediaSource's duration if the duration is finite. Otherwise, if duration is Infinity,seekablereturns 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
seekableproperty always starts at 0 if the duration of the stream is finite (Section 10.1, step 3). CallingendOfStream()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 theseekableproperty once the stream has ended. This leaves JS media player implementers with two choices:HTMLMediaElement'sseekableproperty and implement their own seekability model.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).