« EPG ne se charge pas », c'est de loin la plainte la plus fréquente chez les gens qui configurent l'IPTV sur Android TV, et presque toutes les causes ont la même tête côté utilisateur : la liste des chaînes est OK, la vidéo passe, mais le guide est vide. La bonne nouvelle, c'est que les modes de défaillance sont peu nombreux. Il y en a environ six, et tu peux en éliminer la majorité en quelques minutes.
Ce guide les passe en revue dans l'ordre où ça vaut le coup de les vérifier. Si tu peux coller ton URL XMLTV dans le validateur EPG avant de commencer, tu sautes carrément les étapes 2 à 4.
Les IDs de chaînes sont comparés octet par octet : une seule majuscule de différence suffit à laisser une chaîne avec un guide vide.
1. Vérifie que tu as bien une URL EPG
La première chose à vérifier, c'est si tu as seulement configuré une source de guide. Certains fournisseurs IPTV livrent la liste des chaînes (M3U) et le guide (XMLTV) comme deux URLs séparées, et pas mal d'utilisateurs configurent l'une en supposant que l'autre est venue avec.
Ouvre les réglages de source de ton lecteur et cherche deux champs distincts. L'URL M3U se termine en .m3u, .m3u8, ou contient type=m3u_plus. L'URL XMLTV se termine en général en .xml, .xml.gz, ou contient xmltv.php. Si un seul champ est rempli, c'est ton problème. La plupart des fournisseurs en mode Xtream exposent le XMLTV sur le même hôte que la playlist ; le chemin est en général /xmltv.php?username=…&password=… avec les mêmes identifiants.
2. Confirme que l'URL renvoie bien du XMLTV
Colle l'URL dans un navigateur. Tu devrais voir du XML — du texte qui commence par <?xml ou <tv> et plein de balises <channel> et <programme>. Si tu vois une page HTML à la place, ton fournisseur t'a redirigé vers une page de login ou un portail captif, et ton lecteur reçoit la même réponse. Le correctif est côté fournisseur : il faut d'autres identifiants ou un token frais.
Si tu vois du XML mais minuscule — quelques Ko à peine — ton fournisseur a renvoyé un document vide. Ça aussi, c'est son problème ; la plupart des fichiers XMLTV pour quelques milliers de chaînes pèsent 5 à 50 Mo.
3. Contrôle la structure du fichier
C'est là que le validateur EPG fait gagner du temps. Colle l'URL dans le validateur et regarde les quatre chiffres en haut :
- Chaînes. Doit correspondre à peu près au nombre de chaînes de ton M3U. Si c'est dix fois moins, le fichier n'est pas le guide complet de ton fournisseur.
- Programmes. Doit se compter en milliers. Un guide avec moins de 100 programmes au total ne rendra rien d'utile.
- Couvrant les 24 h à venir. Le chiffre le plus important. S'il est à zéro, ton guide est périmé — le fichier se parse, mais chaque entrée est dans le passé. Le lecteur n'a rien à afficher.
- Heures au total. Un EPG sain couvre 24 à 168 heures à partir de maintenant. Moins de 24, le guide s'arrête aujourd'hui.
4. Regarde le panneau des problèmes
Si les chiffres ont l'air bons mais que le guide est toujours vide, la liste des problèmes du validateur est l'étape suivante. Trois soucis reviennent souvent dans la sortie réelle des fournisseurs :
Programmes orphelins. Des programmes référencent des IDs de chaînes qui ne sont pas déclarés en <channel> dans le même fichier. Les lecteurs stricts (la plupart des récents sur Android TV) les écartent à l'import — le programme n'a pas de chaîne à laquelle se rattacher, donc il disparaît. Si ton fournisseur livre quelques centaines d'orphelins, c'est normal et inoffensif. S'il en livre des dizaines de milliers, c'est ça la raison pour laquelle d'énormes pans de ton guide sont vides.
Chaînes en doublon. Le même ID de chaîne apparaît plusieurs fois en <channel>. La plupart des parseurs gardent la première déclaration et écartent silencieusement les autres. Si celle qui a sauté avait un nom affiché différent, la chaîne apparaît dans le guide mais avec le mauvais libellé.
Aucune couverture « en cours ». Le contrôle phare du validateur : est-ce qu'une chaîne diffuse un programme en ce moment même ? Si la réponse est zéro, le guide va s'afficher complètement vide dans n'importe quel lecteur correctement écrit, même si le fichier XMLTV est techniquement valide. Guide périmé. Il faut que le fournisseur rafraîchisse.
5. Vérifie la correspondance des IDs de chaînes
Celui-là piège presque tout le monde. La valeur <channel id="…"> du XMLTV doit correspondre exactement au tvg-id="…" de ton M3U. Sensible à la casse, sans tolérance. Si ton M3U dit tvg-id="bbc1" et que ton XMLTV dit <channel id="BBC1">, le lecteur n'a aucun moyen de les relier, et la chaîne affiche une case de guide vide.
Pour vérifier, ouvre ton M3U dans un éditeur de texte et regarde une valeur tvg-id. Puis va voir la même chaîne dans le tableau « Chaînes les plus fournies en programmes » du validateur. Les IDs doivent être identiques octet pour octet. Si ce n'est pas le cas, tu as trois options :
- Trouver un fichier de correspondance tvg-id chez ton fournisseur (certains en publient).
- Modifier ton M3U à la main pour que les IDs correspondent à ceux de l'EPG.
- Passer à un lecteur qui fait du matching approximatif par nom affiché. Klipa le fait — mais la plupart non.
6. Contrôle le fuseau horaire
La spécification XMLTV utilise des horodatages AAAAMMJJHHMMSS +ZZZZ. Certains fournisseurs enlèvent le décalage, laissant des horodatages nus sans fuseau. Les parseurs stricts les traitent comme de l'UTC ; les tolérants devinent selon la locale système ; les deux ont parfois tort, et le résultat, c'est un guide décalé de plusieurs heures — les programmes apparaissent dans la mauvaise plage, ou ceux d'hier soir apparaissent comme étant d'aujourd'hui.
Si tes entrées de guide ont l'air bonnes mais sont décalées, c'est presque sûrement la cause. Le correctif est moche : il te faut un outil qui décale chaque horodatage de N heures. On a justement un décaleur de fuseau horaire EPG dédié à ça, et l'article comment corriger les horaires faux explique comment l'utiliser.
Quand rien ne marche
Si tu as vérifié les six et que le guide refuse toujours de se charger, le défaut est dans le lecteur lui-même. La plupart des lecteurs IPTV modernes mettent l'EPG en cache de manière agressive — parfois pendant des heures après un rafraîchissement. Force le vidage du cache EPG, ou désinstalle et réinstalle l'appli pour forcer un import propre.
Klipa ne garde pas un EPG périmé : il rafraîchit toutes les six heures par défaut, et tu peux relancer un rafraîchissement à la main depuis les réglages. Si tu veux un lecteur qui gère déjà correctement ces six modes de défaillance dès l'install, c'est l'argument.