fix constant skip issue
This commit is contained in:
parent
6ca18a6aa5
commit
2f13a09f58
1 changed files with 68 additions and 22 deletions
90
js/player.js
90
js/player.js
|
|
@ -388,29 +388,27 @@ export class Player {
|
||||||
this.audio.src = streamUrl;
|
this.audio.src = streamUrl;
|
||||||
|
|
||||||
// Wait for audio to be ready before playing (prevents restart issues with blob URLs)
|
// Wait for audio to be ready before playing (prevents restart issues with blob URLs)
|
||||||
if (isTracker) {
|
await new Promise((resolve, reject) => {
|
||||||
await new Promise((resolve, reject) => {
|
const onCanPlay = () => {
|
||||||
const onCanPlay = () => {
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
this.audio.removeEventListener('canplay', onCanPlay);
|
this.audio.removeEventListener('error', onError);
|
||||||
this.audio.removeEventListener('error', onError);
|
resolve();
|
||||||
resolve();
|
};
|
||||||
};
|
const onError = (e) => {
|
||||||
const onError = (e) => {
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
this.audio.removeEventListener('canplay', onCanPlay);
|
this.audio.removeEventListener('error', onError);
|
||||||
this.audio.removeEventListener('error', onError);
|
reject(e);
|
||||||
reject(e);
|
};
|
||||||
};
|
this.audio.addEventListener('canplay', onCanPlay);
|
||||||
this.audio.addEventListener('canplay', onCanPlay);
|
this.audio.addEventListener('error', onError);
|
||||||
this.audio.addEventListener('error', onError);
|
|
||||||
|
|
||||||
// Timeout after 10 seconds
|
// Timeout after 10 seconds
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.audio.removeEventListener('canplay', onCanPlay);
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
this.audio.removeEventListener('error', onError);
|
this.audio.removeEventListener('error', onError);
|
||||||
reject(new Error('Timeout waiting for audio to load'));
|
reject(new Error('Timeout waiting for audio to load'));
|
||||||
}, 10000);
|
}, 10000);
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (startTime > 0) {
|
if (startTime > 0) {
|
||||||
this.audio.currentTime = startTime;
|
this.audio.currentTime = startTime;
|
||||||
|
|
@ -426,6 +424,30 @@ export class Player {
|
||||||
this.applyReplayGain();
|
this.applyReplayGain();
|
||||||
|
|
||||||
this.audio.src = streamUrl;
|
this.audio.src = streamUrl;
|
||||||
|
|
||||||
|
// Wait for audio to be ready before playing
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
const onCanPlay = () => {
|
||||||
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
|
this.audio.removeEventListener('error', onError);
|
||||||
|
resolve();
|
||||||
|
};
|
||||||
|
const onError = (e) => {
|
||||||
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
|
this.audio.removeEventListener('error', onError);
|
||||||
|
reject(e);
|
||||||
|
};
|
||||||
|
this.audio.addEventListener('canplay', onCanPlay);
|
||||||
|
this.audio.addEventListener('error', onError);
|
||||||
|
|
||||||
|
// Timeout after 10 seconds
|
||||||
|
setTimeout(() => {
|
||||||
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
|
this.audio.removeEventListener('error', onError);
|
||||||
|
reject(new Error('Timeout waiting for audio to load'));
|
||||||
|
}, 10000);
|
||||||
|
});
|
||||||
|
|
||||||
if (startTime > 0) {
|
if (startTime > 0) {
|
||||||
this.audio.currentTime = startTime;
|
this.audio.currentTime = startTime;
|
||||||
}
|
}
|
||||||
|
|
@ -473,6 +495,30 @@ export class Player {
|
||||||
this.dashInitialized = false;
|
this.dashInitialized = false;
|
||||||
}
|
}
|
||||||
this.audio.src = streamUrl;
|
this.audio.src = streamUrl;
|
||||||
|
|
||||||
|
// Wait for audio to be ready before playing
|
||||||
|
await new Promise((resolve, reject) => {
|
||||||
|
const onCanPlay = () => {
|
||||||
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
|
this.audio.removeEventListener('error', onError);
|
||||||
|
resolve();
|
||||||
|
};
|
||||||
|
const onError = (e) => {
|
||||||
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
|
this.audio.removeEventListener('error', onError);
|
||||||
|
reject(e);
|
||||||
|
};
|
||||||
|
this.audio.addEventListener('canplay', onCanPlay);
|
||||||
|
this.audio.addEventListener('error', onError);
|
||||||
|
|
||||||
|
// Timeout after 10 seconds
|
||||||
|
setTimeout(() => {
|
||||||
|
this.audio.removeEventListener('canplay', onCanPlay);
|
||||||
|
this.audio.removeEventListener('error', onError);
|
||||||
|
reject(new Error('Timeout waiting for audio to load'));
|
||||||
|
}, 10000);
|
||||||
|
});
|
||||||
|
|
||||||
if (startTime > 0) {
|
if (startTime > 0) {
|
||||||
this.audio.currentTime = startTime;
|
this.audio.currentTime = startTime;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue