Perhaps surprising to API users, there is a scenario where currentTime can become outside of the seekable range simply due to a change in what is buffered, when the duration is +Infinity and |live seekable range| is not empty.
Example:
HTMLMediaElement.buffered is { [3,6) [20,30} }
MediaSource.duration is +Infinity
MediaSource live seekable range is set to start=10, end=50
HTMLMediaElement.seekable is thus { [3, 50) }
Then, let's suppose a seek to and playback of media buffered at time [3,6) is done. currentTime begins to progress.
Then, let's suppose app removes [3,6). currentTime remains somewhere in that range, since it previously could not have progressed across the buffered range gap to the next buffered range that begins at time 20.
So, currentTime is somewhere in 3..6.
But HTMLMediaElement.seekable is now { [10, 50) }.
I think this scenario merits at least a non-normative note in the MSE-extended seekable steps.
Also, is this a normative issue with the spec? (Should .seekable also depend on currentTime in this scenario??)
Perhaps surprising to API users, there is a scenario where currentTime can become outside of the seekable range simply due to a change in what is buffered, when the duration is +Infinity and |live seekable range| is not empty.
Example:
Then, let's suppose a seek to and playback of media buffered at time [3,6) is done. currentTime begins to progress. Then, let's suppose app removes [3,6). currentTime remains somewhere in that range, since it previously could not have progressed across the buffered range gap to the next buffered range that begins at time 20.
So, currentTime is somewhere in 3..6. But HTMLMediaElement.seekable is now { [10, 50) }.
I think this scenario merits at least a non-normative note in the MSE-extended
seekable
steps.Also, is this a normative issue with the spec? (Should .seekable also depend on currentTime in this scenario??)