EPG : un guide qui voyage à part
L'EPG (Electronic Program Guide, guide électronique des programmes) est la grille qui indique ce qui passe maintenant et ensuite sur chaque chaîne. Sur la TNT, ces informations sont transportées dans le signal lui-même, au sein de tables normalisées par la norme DVB. Sur Internet, c'est différent : la vidéo d'une chaîne et son guide arrivent en général par deux chemins distincts.
D'un côté, le lecteur reçoit le flux vidéo à partir d'une playlist M3U ou d'une connexion Xtream Codes. De l'autre, il télécharge un fichier de guide, presque toujours au format XMLTV, qui décrit plusieurs jours de programmes pour des dizaines ou des centaines de chaînes. Le travail du lecteur consiste ensuite à faire correspondre chaque chaîne de la playlist à sa grille dans le fichier.
Cette séparation explique la plupart des problèmes : une chaîne peut fonctionner parfaitement tout en ayant un guide vide, parce que la vidéo et le guide ne dépendent pas l'un de l'autre.
La structure d'un fichier XMLTV
XMLTV est un format ouvert, né au début des années 2000 dans la communauté du logiciel libre, fondé sur le langage XML. Un fichier contient un élément racine <tv>, puis deux types de blocs : les chaînes et les programmes.
<?xml version="1.0" encoding="UTF-8"?>
<tv generator-info-name="exemple">
<channel id="exemple1.fr">
<display-name>Exemple 1</display-name>
<icon src="https://img.exemple.fr/ex1.png"/>
</channel>
<programme start="20260928204500 +0200" stop="20260928223000 +0200" channel="exemple1.fr">
<title lang="fr">Documentaire du soir</title>
<desc lang="fr">Voyage au cœur des volcans d'Auvergne.</desc>
<category lang="fr">Documentaire</category>
</programme>
</tv>
L'élément channel
Chaque <channel> porte un attribut id, l'identifiant unique de la chaîne dans ce fichier. Il est souvent formé comme un nom de domaine (exemple1.fr), mais ce n'est qu'une convention : n'importe quelle chaîne de caractères est valable. Il contient aussi un ou plusieurs noms d'affichage (<display-name>) et parfois un logo (<icon>).
L'élément programme
Chaque <programme> décrit une émission : heure de début (start), heure de fin (stop), chaîne concernée (channel, qui reprend l'id d'un élément <channel>), titre, et éventuellement résumé, catégorie, épisode, année, affiche ou signalétique d'âge. Les programmes sont indépendants les uns des autres, ce qui permet à un fichier de couvrir de quelques heures à plusieurs semaines.
La correspondance entre playlist et guide : tvg-id
Le lien entre la chaîne de votre playlist et sa grille repose sur l'attribut tvg-id de la ligne #EXTINF. La règle est simple : le tvg-id de la playlist doit être identique, caractère pour caractère, à l'id du <channel> dans le fichier XMLTV.
#EXTINF:-1 tvg-id="exemple1.fr" group-title="Généralistes",Exemple 1 HD
https://tv.exemple.fr/live/ex1.m3u8
Si la playlist indique tvg-id="Exemple1.fr" et le guide id="exemple1.fr", la correspondance échoue chez beaucoup de lecteurs, car la comparaison tient compte des majuscules. Lorsqu'il n'y a pas de tvg-id, certains lecteurs tentent une correspondance par le nom (tvg-name ou nom affiché) avec le <display-name> du guide ; c'est moins fiable, car « Exemple 1 HD » et « Exemple 1 » ne sont pas identiques.
Avec une connexion Xtream Codes, la correspondance est en principe automatique : le serveur fournit pour chaque chaîne un champ epg_channel_id qui joue le rôle du tvg-id, et un guide XMLTV cohérent avec ces identifiants. Le fonctionnement de cette API est détaillé dans notre article sur les connexions Xtream Codes, et la syntaxe des playlists dans le format M3U ligne par ligne.
Heures, fuseaux et décalages
Les heures XMLTV s'écrivent sous la forme AAAAMMJJhhmmss suivie d'un décalage par rapport au temps universel (UTC). Ainsi, 20260928204500 +0200 signifie le 28 septembre 2026 à 20 h 45, dans un fuseau en avance de deux heures sur UTC, soit 18 h 45 UTC.
En France métropolitaine, l'heure légale est UTC+1 en hiver (+0100) et UTC+2 en été (+0200). Le passage à l'heure d'été a lieu le dernier dimanche de mars, le retour à l'heure d'hiver le dernier dimanche d'octobre. Un guide correct pour une chaîne française doit donc changer de décalage à ces dates, ou tout exprimer en UTC avec +0000.
Le lecteur convertit ensuite ces heures dans le fuseau de votre appareil. D'où trois sources possibles de décalage :
| Symptôme | Cause probable | Remède |
|---|---|---|
| Tout le guide est décalé d'une heure exactement | Le fichier indique un décalage fixe qui ignore le changement d'heure, ou +0000 alors que les heures sont locales | Réglage de décalage du guide dans le lecteur, ou attribut tvg-shift |
| Décalage de plusieurs heures | Fuseau de l'appareil mal réglé, ou guide prévu pour un autre pays | Vérifier date, heure et fuseau dans les paramètres système |
| Une seule chaîne décalée | Chaîne diffusée depuis un autre fuseau ou décalée volontairement (version « +1 ») | tvg-shift sur cette seule chaîne |
| Décalage de quelques minutes | La chaîne ne respecte pas ses horaires annoncés | Aucun : le guide reflète la grille prévue |
L'attribut tvg-shift se place sur une ligne #EXTINF et s'exprime en heures, éventuellement négatives ou décimales : tvg-shift="-1" recule le guide d'une heure pour cette chaîne. C'est un pansement : si le décalage apparaît ou disparaît au changement d'heure, le vrai défaut est dans le fichier source.
Un dernier piège, fréquent sur les clés TV et les box : une date système fausse. Si l'appareil n'a pas synchronisé son horloge (absence de réseau au démarrage, pile de sauvegarde absente), le lecteur cherche les programmes d'un autre jour et n'affiche rien. Activez la date et l'heure automatiques dans les paramètres.
Guide vide : les causes, dans l'ordre
Quand le guide reste désespérément vide, procédez méthodiquement, du plus simple au plus technique.
- Le guide n'est pas encore chargé. Un gros fichier peut demander de quelques secondes à plusieurs minutes au premier téléchargement, surtout sur un appareil modeste. Laissez le lecteur finir, puis rouvrez la liste des chaînes.
- Aucune adresse de guide n'est renseignée. Avec une playlist M3U, il faut soit un attribut
url-tvgdans l'en-tête, soit une adresse saisie dans les réglages du lecteur. - L'adresse ne répond pas. Ouvrez-la dans un navigateur : vous devez obtenir un téléchargement ou du XML, pas une page d'erreur.
- Les identifiants ne correspondent pas. Cherchez le
tvg-idd'une chaîne dans le fichier XMLTV (après décompression). S'il n'y figure pas exactement, le lien est rompu. - Le guide est périmé. Regardez les dates des derniers
<programme>: un fichier qui s'arrête hier ne peut rien afficher aujourd'hui. - La date de l'appareil est fausse. Voir la section précédente.
Si seules quelques chaînes n'ont pas de guide, c'est presque toujours l'étape 4 : ces chaînes n'existent pas dans le fichier, ou sous un autre identifiant. Aucun réglage du lecteur ne peut inventer une grille absente de la source.
Taille, compression et fréquence de mise à jour
Un fichier XMLTV est verbeux : chaque programme répète ses balises, ses attributs et parfois de longs résumés. Pour quelques centaines de chaînes sur une semaine, le fichier peut peser plusieurs dizaines de mégaoctets. C'est pourquoi on le diffuse très souvent compressé au format gzip, avec l'extension .xml.gz. Le texte XML, très répétitif, se compresse bien : on observe couramment une taille divisée par cinq à dix.
| Élément | Effet sur le poids | Conseil |
|---|---|---|
| Nombre de jours couverts | Proportionnel | Deux à trois jours suffisent pour le direct |
| Nombre de chaînes | Proportionnel | Un guide limité à vos chaînes est plus rapide |
| Résumés et images | Important | Utiles, mais alourdissent le chargement |
Compression .gz | Divise fortement le téléchargement | À privilégier quand la source la propose |
Sur une clé TV avec peu de mémoire, c'est moins le téléchargement que l'analyse du fichier qui coûte : des dizaines de milliers de programmes doivent être lus et indexés. Un guide ciblé se charge nettement plus vite qu'un guide « mondial » dont vous n'utilisez qu'une fraction.
Côté fréquence, les lecteurs retéléchargent le guide à intervalles réguliers (souvent une fois par jour) ou à la demande. Si votre grille semble figée, forcez une actualisation depuis les réglages. Dans AICKO IPTV, cette opération et l'ajout d'une source de guide sont décrits sur la page guide TV (EPG).
En résumé
- Le guide des programmes est un fichier XMLTV séparé de la vidéo.
- Il contient des éléments
<channel>et<programme>reliés par un identifiant. - Le
tvg-idde la playlist doit être strictement identique à l'iddu guide. - Les heures portent un décalage UTC (
+0100ou+0200en France) ;tvg-shiftcorrige une chaîne décalée. - Un guide compressé en
.xml.gzet limité à vos chaînes se charge plus vite.
Questions fréquentes
Pourquoi mon guide est-il décalé d'une heure depuis le changement d'heure ?
Le fichier source utilise un décalage fixe qui ne suit pas le passage à l'heure d'été ou d'hiver. Le remède durable est une source corrigée ; en attendant, un décalage d'une heure dans les réglages du guide ou un tvg-shift compense le défaut.
Puis-je utiliser un autre guide que celui de mon service ?
Oui, si votre lecteur permet de saisir une adresse XMLTV. Le guide ne fonctionnera toutefois que si ses identifiants de chaînes correspondent aux tvg-id de votre playlist ; sinon, il faut adapter ces identifiants dans la playlist.
Le lecteur doit-il décompresser lui-même le fichier .gz ?
Oui, la plupart des lecteurs de télévision acceptent directement les fichiers .xml.gz. Vous n'avez à le décompresser vous-même que pour l'inspecter, par exemple avec 7-Zip sous Windows.
Pourquoi certaines chaînes ont-elles un guide et d'autres non ?
Les chaînes sans guide sont absentes du fichier XMLTV ou y figurent sous un identifiant différent de leur tvg-id. Le lecteur ne peut afficher que ce que la source décrit.
