Lecture : repli CPU quand le GPU sature, plus de spinner infini

Serveur chargé ou VRAM limite : NVENC refuse d'ouvrir l'encodeur
(OpenEncodeSessionEx failed: out of memory), FFmpeg meurt en une
seconde et la playlist part en 502. Chaque relance retombait sur le
même GPU saturé : le flux restait illisible.

- Serveur : un échec imputable au GPU (NVENC, CUDA, mémoire) relance
  la session une fois en libx264, sous le même identifiant — les
  segments suivent sans que le lecteur s'en aperçoive. Direct, VOD et
  enregistrements
- Le GPU est écarté 2 min après une panne : les sessions suivantes
  partent directement sur le CPU au lieu d'échouer une à une
- Source injoignable ou délai dépassé : pas de repli, il doublerait la
  charge d'un serveur déjà occupé
- Process.start qui échoue (serveur à court de ressources) : 502/503
  au lieu d'une exception remontée en 500
- Client : une erreur réseau fatale avant la première playlist
  appelait hls.startLoad(), qui ne relance pas ce chargement → spinner
  infini, aucune erreur, relances de page jamais déclenchées. L'erreur
  remonte désormais à la page
- mpegts.js : au-delà de 3 erreurs en 60 s, bascule sur HLS au lieu de
  recréer sans fin (un FFmpeg neuf toutes les 1,2 s)
- player_lite.html : 3 relances avant l'erreur, comme les autres pages

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MichaelandClaude Opus 5.5 committed 2026-10-08 21:28:26 +02:00
1 parent 6d40c38d30
commit db13c85c1d
5 files changed
+340 -74

No files matched your search

+44 -21
View File
@@ -90,25 +90,49 @@
playOverlay.style.display = 'none';
}
var player = new XFPlayer({
video: video,
logPrefix: '[LitePlayer]',
onLoading: showLoading,
onReady: function () {
hideLoading();
playOverlay.style.display = 'none';
},
onError: showError,
onBlocked: function () {
hideLoading();
playOverlay.style.display = 'flex';
},
onProfileChange: function (name) {
loadingHint.textContent =
name === 'safe' ? 'Réseau instable — buffer maximal'
: 'Réseau instable — buffer élargi';
}
});
// Un serveur chargé peut rater le démarrage du transcodeur : on
// relance un lecteur neuf avant d'afficher l'erreur, comme le
// font déjà player.html et player_mobile.html.
var retryCount = 0;
var maxRetries = 3;
var player = null;
function buildPlayer() {
if (player) { try { player.destroy(); } catch (e) {} }
player = new XFPlayer({
video: video,
logPrefix: '[LitePlayer]',
onLoading: showLoading,
onReady: function () {
hideLoading();
retryCount = 0;
playOverlay.style.display = 'none';
},
onError: function (msg) {
if (retryCount < maxRetries) {
retryCount++;
showLoading(
'Reconnexion ' + retryCount + '/' + maxRetries
);
setTimeout(buildPlayer, 1500);
} else {
showError(msg);
}
},
onBlocked: function () {
hideLoading();
playOverlay.style.display = 'flex';
},
onProfileChange: function (name) {
loadingHint.textContent =
name === 'safe' ? 'Réseau instable — buffer maximal'
: 'Réseau instable — buffer élargi';
}
});
window.xfPlayer = player;
player.start();
}
playOverlay.addEventListener('click', function () {
video.play();
@@ -123,8 +147,7 @@
}
});
player.start();
window.xfPlayer = player;
buildPlayer();
})();
</script>
</body>