New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.
Starred by 29 users

Issue metadata

Status: Fixed
Closed: Aug 2017
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Launch-OWP
Launch-Accessibility: ----
Launch-Exp-Leadership: ----
Launch-Leadership: ----
Launch-Legal: ----
Launch-M-Approved: ----
Launch-M-Target: 62-Dev , 62-Beta , 62-Stable-Exp , 62-Stable
Launch-Privacy: ----
Launch-Security: ----
Launch-Test: ----
Launch-UI: ----

Blocked on:
issue 624037

Sign in to add a comment

Issue 623698: API for customizing live MediaSource seekable range

Reported by, Jun 27 2016 Project Member

Issue description

Change description:
Let MediaSource apps more effectively customize the HTMLMediaElement.seekable range logic by providing (or removing) a single seekable range that is union'ed with the current buffered ranges' to result in a single seekable range which fits both.

Without such support, apps need to fake a finite media duration to obtain reasonable seekable range results when nothing is buffered, and similarly apps need to fake a finite media duration to allow seeking beyond the current buffered ranges' end (perhaps to return to the live edge of the stream).

Previous discussion on this was done in  bug 461733  and  bug 546712 .
The MediaSource Spec [0] now includes a change [1] that supports this behavior. To keep the spec change simpler and less-breaking, existing HTMLMediaElement behavior for seekable is retained until/unless the new {set,clear}LiveSeekableRanges API is used on the MediaSource attached to that HTMLMediaElement, or if the media duration is finite, then the new API's logic is ignored.


Changes to API surface:
MediaSource.setLiveSeekableRange [2]
MediaSource.clearLiveSeekableRange [3]
HTMLMediaElement.seekable when attached to MediaSource with duration of positive infinity [4]


Public standards discussion:

Support in other browsers:
Internet Explorer: Planned (MSFT co-editor of MSE spec approved the change)
Firefox: Unknown
Safari: Unknown

Comment 1 by, Jun 27 2016

 Issue 546712  has been merged into this issue.

Comment 2 by, Jun 27 2016

 Issue 461733  has been merged into this issue.

Comment 3 by, Jun 27 2016

Labels: MSE-compat MSEscrubbed

Comment 4 by, Jun 28 2016

Blocking: 624037

Comment 5 by, Jun 28 2016

Project Member
The following revision refers to this bug:

commit b2f2d65c0068345ba8d5ee9462bab35463c94475
Author: wolenetz <>
Date: Tue Jun 28 20:18:53 2016

MSE: Experimental support for customizing live seekable range

Adds {set,clear}LiveSeekableRange methods to MediaSource IDL, with
implementations corresponding to the recent MSE spec addition of these
methods [1]. These methods are behind the MediaSourceExperimental
RuntimeEnabled flag until intent to ship is approved in a later
Intent to implement thread is at [2].


BUG= 623698 
TEST=passes upstream w3c/wpt mediasource-liveseekable.html test in PR at,

Cr-Commit-Position: refs/heads/master@{#402519}


Comment 6 by, Jun 28 2016

Labels: -Pri-3 Pri-2

Comment 7 by, Nov 11 2016


Comment 8 by, Nov 11 2016


Comment 9 by, Aug 8 2017

Labels: M-62
Intent to ship [a] (M-62) has received its third LGTM. I'll put together a CL that moves this API from behind the MediaSourceExperimental RuntimeEnabled flag to be always-enabled.


Comment 10 by, Aug 8 2017

Labels: Launch-M-Target-62-Dev Launch-M-Target-62-Beta Launch-M-Target-62-Stable-Exp Launch-M-Target-62-Stable

Comment 11 by, Aug 8 2017

Always-on CL is out for review at

Comment 12 by, Aug 10 2017

Project Member
The following revision refers to this bug:

commit 5b985d6eadf58cd435e304c86cf34320e46c0bc9
Author: Matt Wolenetz <>
Date: Thu Aug 10 05:13:06 2017

MSE: Ship MediaSource.{set,clear}LiveSeekableRange

Moves this portion of the MSE API from behind the RuntimeEnabled flag

BUG= 623698 

Intent to ship:

https: //!topic/blink-dev/-LTXhyDzS_E
Change-Id: I094c4f27b678949060354bcb8bc6a1315c4d441e
Reviewed-by: Chrome Cunningham <>
Reviewed-by: Rick Byers <>
Commit-Queue: Matthew Wolenetz <>
Cr-Commit-Position: refs/heads/master@{#493246}

Comment 13 by, Aug 10 2017

Status: Fixed (was: Assigned)
I've updated the chromestatus entry ( to indicate this is "on by default" as of M62 (and Opera 49). Note that it is not behind any runtime flag (risk was deemed very low).

Comment 14 by, Aug 10 2017

CC+=crouleau@ -- Caleb, w.r.t. test: we have some basic layout tests that have been testing this for about a year now with no known issues. Perhaps sync with dahlke@ to see if there's anything more "meaty" to test here (I think Jon was working on related controls work for live streams).

Comment 15 by, Aug 10 2017

cc+ crouleau@ for realz -- see #14.

Comment 16 by, Sep 29 2017

Blocking: -624037

Comment 17 by, Sep 29 2017

Blockedon: 624037

Comment 18 Deleted

Comment 19 by, Dec 5

Is {set,clear}LiveSeekableRange API still enabled in Chrome 7X by default?

I'm trying to play live stream with dash.js. Dash.js use setLiveSeekableRange API to set the seekable range. setLiveSeekableRange function exist and do not throw error, but the seekable do not changed.
It is not working in below test:

Customizing seekable range would be useful for live streaming.

Comment 20 by, Dec 5

I can confirm that I do not see any changes to the native controls with setLiveSeekableRange on Chrome 70 on ChromeOS.  (Tested with the Shaka Player demo, the "show native controls" checkbox on the demo, and the JS console to call the method.)

Comment 21 by, Dec 5

Removing people no longer on this team.

Comment 22 by, Dec 5

@#19, yes, it's shipped and working. I re-verified manually just now thaat Chrome 0.0.3538.110 (Official Build) (64-bit) on Linux works correctly w.r.t.

Of particular note, the range set by setLiveSeekableRange is *ignored* if the duration is not +Infinity. And even if the duration is +Infinity, the range set by setLiveSeekableRange does not truncate existing buffered range at the front or back -- but it does allow tighter seekable range than otherwise (e.g., fetch and buffer { [3,6) }, set duration to +Infinity => seekable is [0, 6). setLiveSeekableRange(1,4) => seekable becomes [1, 6). setLiveSeekableRange(40,42) => seekable becomes [3, 42). clearLiveSeekable or change duration to finite positive value => seekable reverts to normal [0, 6).

@#20: The lack of default controls reflecting the seekable range when MSE is attached, duration is +Infinity, and a live seekable range has been set, is bug 771706.

Comment 23 by, Dec 5

(@#22, the start of the version string was missing: I meant "70.0.3538.110 (Official Build) (64-bit)")

Comment 24 by, Dec 21

Thank you for clarify that setLiveSeekableRange is ignored if duration is not +Infinity. 
I mixed up 2 bugs (the lack of default controls and the incorrect seekable range of dash.js due to the duration is not Infinity) and thought this API is not working. Sorry for disturbing you.

Sign in to add a comment