in 2019/lib/mse/msutil.js [611:645]
window.appendAt = function(timeoutManager, mp, sb, chain, t, gap, cb) {
if (!elementInBody(mp)) {
cb();
return;
}
gap = gap || 3;
var buffered_end = findBufferedRangeEndForTime(sb, t);
(function loop(buffer) {
if (!elementInBody(mp)) {
cb();
return;
}
if (buffer) {
if (sb.updating) {
timeoutManager.setTimeout(function() {
loop(buffer);
}, 0);
} else {
if (!safeAppend(sb, buffer))
return;
timeoutManager.setTimeout(loop, 0);
}
} else {
buffered_end = findBufferedRangeEndForTime(sb, t);
if (t + gap >= (buffered_end || 0) && !mp.error) {
chain.pull(loop);
} else {
cb();
}
}
})();
};