stream: auto-reconnect to the live stream with exponential backoff
If the stream drops (server restart, network loss), the player now retries goLive() on error/ended/stalled with a delay that doubles each failure, capped at 30s, and resets once audio flows again. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
155a13d50e
commit
6b52795ae1
1 changed files with 23 additions and 0 deletions
|
|
@ -113,6 +113,29 @@
|
|||
}
|
||||
goLive();
|
||||
|
||||
// Reconnexion automatique : si le flux se coupe (serveur redémarré, réseau
|
||||
// perdu…), on retente avec un délai qui double à chaque échec, plafonné à
|
||||
// 30 s, pour ne pas marteler un serveur encore indisponible. Le compteur
|
||||
// repart à zéro dès qu'on rejoue effectivement du son.
|
||||
const RECONNECT_MIN = 1000, RECONNECT_MAX = 30000;
|
||||
let reconnectDelay = RECONNECT_MIN;
|
||||
let reconnectTimer = null;
|
||||
function scheduleReconnect() {
|
||||
if (reconnectTimer || player.paused) return;
|
||||
reconnectTimer = setTimeout(() => {
|
||||
reconnectTimer = null;
|
||||
goLive();
|
||||
reconnectDelay = Math.min(reconnectDelay * 2, RECONNECT_MAX);
|
||||
}, reconnectDelay);
|
||||
}
|
||||
player.addEventListener("error", scheduleReconnect);
|
||||
player.addEventListener("ended", scheduleReconnect);
|
||||
player.addEventListener("stalled", scheduleReconnect);
|
||||
player.addEventListener("playing", () => {
|
||||
if (reconnectTimer) { clearTimeout(reconnectTimer); reconnectTimer = null; }
|
||||
reconnectDelay = RECONNECT_MIN;
|
||||
});
|
||||
|
||||
// Volume persistant : on restaure le dernier réglage de l'utilisateur,
|
||||
// avec 40% comme valeur par défaut au tout premier lancement.
|
||||
const VOLUME_KEY = "radieo-volume";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue