Skip to content

Commit

Permalink
Improve delay for MSE player
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexxIT committed Feb 2, 2025
1 parent 35cf82f commit eeb0012
Showing 1 changed file with 22 additions and 16 deletions.
38 changes: 22 additions & 16 deletions www/video-rtc.js
Original file line number Diff line number Diff line change
Expand Up @@ -439,24 +439,30 @@ export class VideoRTC extends HTMLElement {
const sb = ms.addSourceBuffer(msg.value);
sb.mode = 'segments'; // segments or sequence
sb.addEventListener('updateend', () => {
if (sb.updating) return;

try {
if (bufLen > 0) {
if (!sb.updating && bufLen > 0) {
try {
const data = buf.slice(0, bufLen);
bufLen = 0;
sb.appendBuffer(data);
} else if (sb.buffered && sb.buffered.length) {
const end = sb.buffered.end(sb.buffered.length - 1) - 15;
const start = sb.buffered.start(0);
if (end > start) {
sb.remove(start, end);
ms.setLiveSeekableRange(end, end + 15);
}
// console.debug("VideoRTC.buffered", start, end);
bufLen = 0;
} catch (e) {
// console.debug(e);
}
}

if (!sb.updating && sb.buffered && sb.buffered.length) {
const end = sb.buffered.end(sb.buffered.length - 1);
const start = end - 5;
const start0 = sb.buffered.start(0);
if (start > start0) {
sb.remove(start0, start);
ms.setLiveSeekableRange(start, end);
}
if (this.video.currentTime < start) {
this.video.currentTime = start;
}
} catch (e) {
// console.debug(e);
const gap = end - this.video.currentTime;
this.video.playbackRate = gap > 0.1 ? gap : 0.1;
// console.debug('VideoRTC.buffered', gap, this.video.playbackRate, this.video.readyState);
}
});

Expand All @@ -468,7 +474,7 @@ export class VideoRTC extends HTMLElement {
const b = new Uint8Array(data);
buf.set(b, bufLen);
bufLen += b.byteLength;
// console.debug("VideoRTC.buffer", b.byteLength, bufLen);
// console.debug('VideoRTC.buffer', b.byteLength, bufLen);
} else {
try {
sb.appendBuffer(data);
Expand Down

0 comments on commit eeb0012

Please sign in to comment.