fix constant skip issue

This commit is contained in:
Eduard Prigoana 2026-02-05 17:31:54 +00:00
parent 6ca18a6aa5
commit 2f13a09f58

View file

@ -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;
} }