EPG: una guida che viaggia a parte
L'EPG (Electronic Program Guide, guida elettronica ai programmi) è la griglia che indica cosa va in onda adesso e dopo su ogni canale. Sul digitale terrestre queste informazioni sono trasportate nel segnale stesso, all'interno di tabelle standardizzate dalla norma DVB. Su Internet è diverso: il video di un canale e la sua guida arrivano in genere per due strade distinte.

Da un lato, il lettore riceve il flusso video da una playlist M3U o da una connessione Xtream Codes. Dall'altro, scarica un file di guida, quasi sempre in formato XMLTV, che descrive diversi giorni di programmi per decine o centinaia di canali. Il compito del lettore consiste poi nel far corrispondere ogni canale della playlist al suo palinsesto nel file.
Questa separazione spiega la maggior parte dei problemi: un canale può funzionare perfettamente pur avendo una guida vuota, perché il video e la guida non dipendono l'uno dall'altra.
La struttura di un file XMLTV
XMLTV è un formato aperto, nato all'inizio degli anni 2000 nella comunità del software libero, basato sul linguaggio XML. Un file contiene un elemento radice <tv>, poi due tipi di blocchi: i canali e i programmi.
<?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'elemento channel
Ogni <channel> porta un attributo id, l'identificatore univoco del canale in quel file. È spesso formato come un nome di dominio (exemple1.fr), ma è solo una convenzione: qualsiasi stringa di caratteri è valida. Contiene anche uno o più nomi visualizzati (<display-name>) e talvolta un logo (<icon>).
L'elemento programme
Ogni <programme> descrive una trasmissione: ora di inizio (start), ora di fine (stop), canale interessato (channel, che riprende l'id di un elemento <channel>), titolo, ed eventualmente riassunto, categoria, episodio, anno, locandina o classificazione per età. I programmi sono indipendenti l'uno dall'altro, il che permette a un file di coprire da qualche ora a diverse settimane.
La corrispondenza tra playlist e guida: tvg-id
Il collegamento tra il canale della vostra playlist e il suo palinsesto si basa sull'attributo tvg-id della riga #EXTINF. La regola è semplice: il tvg-id della playlist deve essere identico, carattere per carattere, all'id del <channel> nel file XMLTV.
#EXTINF:-1 tvg-id="exemple1.fr" group-title="Généralistes",Exemple 1 HD
https://tv.exemple.fr/live/ex1.m3u8
Se la playlist indica tvg-id="Exemple1.fr" e la guida id="exemple1.fr", la corrispondenza fallisce in molti lettori, perché il confronto distingue maiuscole e minuscole. Quando manca il tvg-id, alcuni lettori tentano una corrispondenza per nome (tvg-name o nome visualizzato) con il <display-name> della guida; è meno affidabile, perché «Exemple 1 HD» ed «Exemple 1» non sono identici.
Con una connessione Xtream Codes, la corrispondenza è in linea di principio automatica: il server fornisce per ogni canale un campo epg_channel_id che svolge il ruolo del tvg-id, e una guida XMLTV coerente con questi identificatori. Il funzionamento di questa API è dettagliato nel nostro articolo sulle connessioni Xtream Codes, e la sintassi delle playlist nel formato M3U riga per riga.
Ore, fusi e sfasamenti
Le ore XMLTV si scrivono nella forma AAAAMMGGhhmmss seguita da uno scarto rispetto al tempo universale (UTC). Così, 20260928204500 +0200 significa il 28 settembre 2026 alle 20:45, in un fuso in anticipo di due ore sull'UTC, cioè le 18:45 UTC.
Nella Francia metropolitana, come in Italia, l'ora legale è UTC+1 in inverno (+0100) e UTC+2 in estate (+0200). Il passaggio all'ora estiva avviene l'ultima domenica di marzo, il ritorno all'ora invernale l'ultima domenica di ottobre. Una guida corretta per un canale di questi paesi deve quindi cambiare scarto in quelle date, oppure esprimere tutto in UTC con +0000.
Il lettore converte poi queste ore nel fuso del vostro dispositivo. Da qui tre possibili fonti di sfasamento:
| Sintomo | Causa probabile | Rimedio |
|---|---|---|
| Tutta la guida è sfasata di un'ora esatta | Il file indica uno scarto fisso che ignora il cambio d'ora, oppure +0000 mentre le ore sono locali | Impostazione di sfasamento della guida nel lettore, oppure attributo tvg-shift |
| Sfasamento di più ore | Fuso del dispositivo impostato male, o guida prevista per un altro paese | Verificare data, ora e fuso nelle impostazioni di sistema |
| Un solo canale sfasato | Canale trasmesso da un altro fuso o sfasato volontariamente (versione «+1») | tvg-shift solo su quel canale |
| Sfasamento di qualche minuto | Il canale non rispetta gli orari annunciati | Nessuno: la guida riflette il palinsesto previsto |
L'attributo tvg-shift si colloca su una riga #EXTINF e si esprime in ore, eventualmente negative o decimali: tvg-shift="-1" sposta indietro la guida di un'ora per quel canale. È un cerotto: se lo sfasamento compare o scompare al cambio d'ora, il vero difetto è nel file di origine.
Un'ultima trappola, frequente su chiavette TV e box: una data di sistema errata. Se il dispositivo non ha sincronizzato l'orologio (assenza di rete all'avvio, batteria tampone assente), il lettore cerca i programmi di un altro giorno e non mostra nulla. Attivate data e ora automatiche nelle impostazioni.
Guida vuota: le cause, in ordine
Quando la guida resta disperatamente vuota, procedete con metodo, dal più semplice al più tecnico.
- La guida non è ancora caricata. Un file grande può richiedere da qualche secondo a diversi minuti al primo download, soprattutto su un dispositivo modesto. Lasciate finire il lettore, poi riaprite l'elenco dei canali.
- Nessun indirizzo di guida è indicato. Con una playlist M3U serve o un attributo
url-tvgnell'intestazione, o un indirizzo inserito nelle impostazioni del lettore. - L'indirizzo non risponde. Apritelo in un browser: dovete ottenere un download o del XML, non una pagina di errore.
- Gli identificatori non corrispondono. Cercate il
tvg-iddi un canale nel file XMLTV (dopo la decompressione). Se non vi compare esattamente, il collegamento è rotto. - La guida è scaduta. Guardate le date degli ultimi
<programme>: un file che si ferma a ieri non può mostrare nulla oggi. - La data del dispositivo è errata. Vedere la sezione precedente.
Se solo alcuni canali non hanno la guida, è quasi sempre il passaggio 4: questi canali non esistono nel file, o con un altro identificatore. Nessuna impostazione del lettore può inventare un palinsesto assente dalla sorgente.
Dimensioni, compressione e frequenza di aggiornamento
Un file XMLTV è prolisso: ogni programma ripete i suoi tag, i suoi attributi e talvolta lunghi riassunti. Per qualche centinaio di canali su una settimana, il file può pesare diverse decine di megabyte. Per questo viene molto spesso distribuito compresso in formato gzip, con l'estensione .xml.gz. Il testo XML, molto ripetitivo, si comprime bene: si osserva comunemente una dimensione divisa per cinque o dieci.
| Elemento | Effetto sul peso | Consiglio |
|---|---|---|
| Numero di giorni coperti | Proporzionale | Due o tre giorni bastano per la diretta |
| Numero di canali | Proporzionale | Una guida limitata ai vostri canali è più rapida |
| Riassunti e immagini | Importante | Utili, ma appesantiscono il caricamento |
Compressione .gz | Riduce fortemente il download | Da privilegiare quando la sorgente la offre |
Su una chiavetta TV con poca memoria, a pesare è meno il download che l'analisi del file: decine di migliaia di programmi devono essere letti e indicizzati. Una guida mirata si carica molto più in fretta di una guida «mondiale» di cui usate solo una frazione.
Quanto alla frequenza, i lettori riscaricano la guida a intervalli regolari (spesso una volta al giorno) o su richiesta. Se il palinsesto sembra bloccato, forzate un aggiornamento dalle impostazioni. In AICKO IPTV, questa operazione e l'aggiunta di una sorgente di guida sono descritte nella pagina guida TV (EPG).
In sintesi
- La guida ai programmi è un file XMLTV separato dal video.
- Contiene elementi
<channel>e<programme>collegati da un identificatore. - Il
tvg-iddella playlist deve essere rigorosamente identico all'iddella guida. - Le ore portano uno scarto UTC (
+0100o+0200in Francia e in Italia);tvg-shiftcorregge un canale sfasato. - Una guida compressa in
.xml.gze limitata ai vostri canali si carica più in fretta.
Domande frequenti
Perché la mia guida è sfasata di un'ora dopo il cambio d'ora?
Il file di origine usa uno scarto fisso che non segue il passaggio all'ora estiva o invernale. Il rimedio duraturo è una sorgente corretta; nel frattempo, uno sfasamento di un'ora nelle impostazioni della guida o un tvg-shift compensa il difetto.
Posso usare una guida diversa da quella del mio servizio?
Sì, se il vostro lettore permette di inserire un indirizzo XMLTV. La guida funzionerà però solo se i suoi identificatori di canale corrispondono ai tvg-id della vostra playlist; altrimenti bisogna adattare questi identificatori nella playlist.
Il lettore deve decomprimere da solo il file .gz?
Sì, la maggior parte dei lettori per televisione accetta direttamente i file .xml.gz. Dovete decomprimerlo voi stessi solo per ispezionarlo, per esempio con 7-Zip su Windows.
Perché alcuni canali hanno la guida e altri no?
I canali senza guida sono assenti dal file XMLTV oppure vi compaiono con un identificatore diverso dal loro tvg-id. Il lettore può mostrare solo ciò che la sorgente descrive.
