Lecture : un échec de chargement de mpegts.js n'est plus fatal

L'écran « Échec du chargement : vendor/mpegts.min.js » était un cul-de-sac :
la moindre requête ratée sur la lib condamnait la chaîne, alors que le flux
restait parfaitement lisible autrement.

- xf-player-core : le chargement des libs est retenté une fois en
  contournant le cache HTTP (les libs sont servies en max-age=86400, une
  entrée tronquée bloquait le lecteur jusqu'au vidage manuel du cache), et
  seul un succès est mémorisé — la promesse rejetée restait en cache et
  rendait tout réessai impossible pour le reste de la session.
- Repli automatique : si mpegts.js reste introuvable, le live bascule sur la
  route HLS équivalente (où FFmpeg réencode déjà l'audio en AAC) ; si hls.js
  reste introuvable, on tente le HLS natif. Plus d'écran d'erreur quand un
  chemin de lecture est encore disponible.
- Message d'erreur exploitable : la cause réelle est affichée (HTTP 404,
  429, réseau injoignable) au lieu d'un échec indifférencié.
- Préchargement corrigé : les trois players préchargeaient hls.js en dur,
  soit 618 Ko téléchargés pour rien à chaque zap TV — c'est mpegts.js qui
  sert au direct — au détriment du flux et du chargement de mpegts.js
  lui-même. Le préchargement suit désormais le flux demandé, avec la même
  décision que XFPlayer.start() (et ne charge rien sur Safari/iOS).
- Serveur : avertissement explicite au démarrage si web/vendor/*.min.js
  manque, au lieu de laisser le navigateur échouer sans explication.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FSovdudi3KBwZK3aC42fw
This commit is contained in:
MichaelandClaude Opus 5 committed 2026-09-09 16:40:31 +00:00
1 parent 175cff560c
commit d6c7184475
6 files changed
+183 -9

No files matched your search

+29 -1
View File
@@ -11,7 +11,35 @@
et environ 200 Ko de JS jamais téléchargés dans le cas courant.
-->
<link rel="stylesheet" href="xf-player.css">
<link rel="preload" href="vendor/hls.min.js" as="script">
<script>
// Précharge la SEULE lib utile à CE flux, dès le parse du <head>.
// Un préchargement fixe de hls.js faisait télécharger 618 Ko inutiles
// à chaque zap TV — la lib réellement nécessaire au direct est
// mpegts.js — et cette bande passante était prise sur le flux
// lui-même et sur mpegts.js, jusqu'à faire échouer son chargement sur
// les liens contraints. Même décision que XFPlayer.start().
(function () {
var p = new URLSearchParams(location.search);
var url = (p.get('url') || '').toLowerCase();
var isHls = url.indexOf('.m3u8') !== -1;
var nativeHls =
document.createElement('video')
.canPlayType('application/vnd.apple.mpegurl') !== '';
var lib = null;
if (isHls) {
// Safari/iOS lit le HLS nativement : aucune lib à charger.
if (!nativeHls) lib = 'hls.min.js';
} else if (p.get('type') === 'live' || url.indexOf('.ts') !== -1) {
lib = 'mpegts.min.js';
}
if (!lib) return;
var l = document.createElement('link');
l.rel = 'preload';
l.as = 'script';
l.href = 'vendor/' + lib;
document.head.appendChild(l);
})();
</script>
</head>
<body>