MSE gapless looping via repeated SourceBuffer appends with a sliding appendWindow freezes after the first loop: setting appendWindowStart = kperiod for copy k throws TypeError ('outside the range') because appendWindowEnd still equals kperiod from copy k-1, and appendWindowStart must be strictly less than appendWindowEnd. The thrown exception kills the append queue so only copy 0 is ever buffered.
Order matters: raise appendWindowEnd = (k+1)period BEFORE setting appendWindowStart = kperiod. New end is always > current start so end-first is safe for every k. Related race: never run a queued appendBuffer while sb.updating is true (an in-flight remove() from buffer eviction also sets updating) — gate the queue on sb.updating and resume from the updateend event.