Un file di testo, non un contenuto
Il formato M3U è nato negli anni Novanta con i lettori audio per desktop, in particolare Winamp, per registrare un elenco di brani da riprodurre in sequenza. Il principio non è cambiato da allora: una playlist M3U è un file di testo semplice che contiene una serie di indirizzi (percorsi locali o URL) che il lettore apre in ordine. Non contiene immagini, audio né video. Si limita a dire al lettore dove andare a prendere ogni flusso e come mostrarlo.

Questo spiega due cose spesso fraintese. Prima di tutto, un file M3U di qualche centinaio di kilobyte può «contenere» migliaia di voci: dentro c'è solo testo. Poi, la playlist vale solo per gli indirizzi a cui rimanda: se il server puntato è offline, il file resta perfettamente valido, ma non parte nulla. Un lettore come un lettore video multimediale si limita a interpretare queste righe; la legalità e la disponibilità dei flussi dipendono interamente dalla loro fonte e dovete detenere i diritti su ciò che guardate.
Oggi si incontrano playlist M3U in tre situazioni principali: gli elenchi di file audio o video archiviati su un disco o su un NAS, gli elenchi di radio e canali trasmessi online dai loro editori e gli elenchi forniti da un servizio televisivo a cui siete abbonati.
La struttura minima: #EXTM3U e #EXTINF
Una playlist detta «estesa» (Extended M3U) inizia obbligatoriamente con l'intestazione #EXTM3U sulla primissima riga. Ogni voce occupa poi due righe: una riga di descrizione che inizia con #EXTINF, poi la riga con l'indirizzo vero e proprio. Ecco un esempio completo e valido, con due radio fittizie:
#EXTM3U
#EXTINF:-1,Radio Exemple Info
https://flux.exemple.fr/info/live.mp3
#EXTINF:-1,Radio Exemple Musique
https://flux.exemple.fr/musique/playlist.m3u8
Scomponiamo la riga #EXTINF:-1,Radio Exemple Info:
#EXTINF:annuncia le informazioni della voce che segue.-1è la durata in secondi. Per un brano musicale si indicherebbe per esempio215; per un flusso in diretta, che non ha fine, la convenzione è-1(alcune liste mettono0, cosa che la maggior parte dei lettori tollera).- la virgola separa la parte tecnica dal nome visualizzato. Tutto ciò che segue l'ultima virgola degli attributi è il titolo che vedrà l'utente.
Le righe che iniziano con # e non sono direttive note vengono trattate come commenti e ignorate. Le righe vuote sono in linea di principio tollerate, ma è meglio evitarle tra un #EXTINF e il suo indirizzo: alcuni lettori perdono allora l'associazione tra nome e flusso.
Gli attributi estesi: tvg-id, tvg-logo, group-title
Per le liste di canali si è imposto un uso: aggiungere degli attributi tra la durata e la virgola, nella forma nome="valore". Non fanno parte di alcuno standard ufficiale, ma quasi tutti i lettori televisivi li riconoscono.
#EXTM3U url-tvg="https://guide.exemple.fr/epg.xml.gz"
#EXTINF:-1 tvg-id="exemple1.fr" tvg-name="Exemple 1" tvg-logo="https://img.exemple.fr/ex1.png" group-title="Généralistes",Exemple 1 HD
https://tv.exemple.fr/live/ex1.m3u8
| Attributo | Ruolo | Errore frequente |
|---|---|---|
tvg-id | Identificatore che collega il canale alla sua guida dei programmi (EPG). | Identificatore diverso da quello del file XMLTV: la guida resta vuota. |
tvg-name | Nome «tecnico», a volte usato al posto del tvg-id per la corrispondenza con l'EPG. | Spazi o accenti diversi da quelli della guida. |
tvg-logo | Indirizzo dell'immagine mostrata accanto al canale. | Link in http bloccato dal dispositivo, o immagine troppo pesante. |
group-title | Categoria in cui il canale è ordinato (Sport, Notizie, Ragazzi…). | Errori di battitura che creano due categorie quasi identiche. |
tvg-shift | Scarto orario della guida, in ore, per questo canale. | Usato per compensare un fuso orario dichiarato male alla fonte. |
catchup, catchup-days | Indicano che è possibile un recupero (replay) e su quanti giorni. | Ignorati dai lettori che non gestiscono il recupero. |
Nella riga di intestazione, l'attributo url-tvg (o la variante x-tvg-url) indica l'indirizzo della guida dei programmi in formato XMLTV. Il funzionamento di questa guida è illustrato nel nostro articolo su l'EPG e il formato XMLTV.
Due regole di sintassi evitano la maggior parte dei problemi: i valori sono sempre tra virgolette dritte (", mai « » né “ ”) e il nome visualizzato non deve contenere virgolette non precedute da escape. Una virgola dentro un valore tra virgolette è accettata dai buoni parser, ma una virgola nel nome del canale stesso può troncare il titolo in certi lettori.
M3U o M3U8: qual è la differenza?
L'estensione .m3u8 indica in origine una playlist M3U codificata in UTF-8. L'«8» viene da lì. Un file .m3u classico, invece, veniva storicamente letto nella codifica locale del sistema (spesso Windows-1252 nell'Europa occidentale), il che trasformava «Généralistes» in «Généralistes» quando si apriva su una macchina un file scritto su un'altra.
Nel 2009 Apple ha ripreso questa estensione per il suo protocollo di diffusione HLS (HTTP Live Streaming), poi standardizzato nella RFC 8216. Un file .m3u8 può quindi indicare due cose molto diverse:
- un elenco di canali o di brani, scritto da una persona o da un servizio, che caricate nel vostro lettore;
- un manifest HLS, generato automaticamente da un server di diffusione, che elenca i piccoli segmenti video di qualche secondo di un solo canale o di un solo film.
Il secondo contiene direttive proprie di HLS, come #EXT-X-TARGETDURATION o #EXT-X-STREAM-INF. Se aprite un indirizzo e vedete scorrere nomi del tipo segment_10452.ts, state guardando un manifest HLS, non una playlist di canali. Il nostro articolo HLS, MPEG-TS e DASH spiega questo meccanismo in dettaglio.
In pratica, i lettori attuali leggono indifferentemente .m3u e .m3u8 e rilevano l'UTF-8 nella maggior parte dei casi. La cosa più sicura resta salvare sempre le playlist in UTF-8, qualunque sia l'estensione.
Codifica, BOM e fine riga: le trappole invisibili
Molte playlist «che non funzionano» sono scritte perfettamente… ma salvate male. Tre dettagli invisibili sullo schermo creano problemi.
Il BOM UTF-8
Alcuni editor, comprese vecchie versioni del Blocco note di Windows, aggiungono all'inizio del file tre byte invisibili chiamati BOM (Byte Order Mark: EF BB BF in esadecimale). Un lettore rigoroso che verifica che il file inizi esattamente con #EXTM3U vede allora #EXTM3U e rifiuta la lista, oppure ignora la prima voce. La soluzione: salvare in «UTF-8» e non in «UTF-8 con BOM». In Notepad++ il menu Codifica propone esplicitamente le due opzioni; in Visual Studio Code la codifica compare in basso a destra nella finestra e si cambia con un clic.
Gli accenti convertiti male
Se i nomi vengono visualizzati con sequenze come é o con rombi �, il file è stato scritto in una codifica e letto in un'altra. Riaprite il file in un editor che permetta di scegliere la codifica di lettura (Windows-1252 o ISO-8859-1 se gli accenti tornano corretti), poi salvatelo di nuovo in UTF-8.
I fine riga
Windows termina le righe con due caratteri (CR LF), Linux, macOS e Android con uno solo (LF). I lettori recenti accettano entrambi, ma un CR residuo attaccato alla fine di un URL può renderlo non valido su un server pignolo. In caso di dubbio, convertite in LF, come propongono gli editor di codice.
Gli errori di sintassi più comuni
Ecco i difetti che si ritrovano più spesso aprendo una playlist ribelle, con il sintomo e la correzione.
| Sintomo | Causa probabile | Correzione |
|---|---|---|
| «File non valido» all'apertura | Intestazione #EXTM3U assente, scritta male o preceduta da un BOM | Mettere #EXTM3U da solo sulla riga 1, salvare in UTF-8 senza BOM |
| I nomi sono sfalsati di un canale | Un URL mancante o una riga #EXTINF doppia | Verificare la stretta alternanza descrizione / indirizzo |
| Tutti i canali si chiamano «-1» | Virgola mancante prima del nome | Scrivere #EXTINF:-1 attributi,Nome |
| Categorie e loghi ignorati | Virgolette tipografiche o apostrofi al posto di " | Sostituire con virgolette dritte |
| Una sola voce non parte | Spazio alla fine dell'URL, carattere non codificato (spazio, accento) nell'indirizzo | Eliminare gli spazi, codificare lo spazio come %20 |
| Il file scaricato è una pagina HTML | L'indirizzo restituisce una pagina di errore o di accesso invece dell'elenco | Aprire l'indirizzo in un browser per leggere il messaggio del server |
Per le liste molto grandi, un ultimo riflesso utile: contare le righe #EXTINF e le righe di indirizzi. Su Windows, PowerShell lo fa con (Select-String -Path liste.m3u -Pattern '^#EXTINF').Count. I due numeri devono essere uguali.
Creare e modificare la propria playlist
Costruire una playlist a mano è semplice e permette di raggruppare, per esempio, le radio e i canali che i loro editori trasmettono gratuitamente sui propri siti, oppure i video del vostro NAS. Il metodo:
- Aprite un editor di testo che gestisca bene la codifica: Notepad++ o Visual Studio Code su Windows, TextEdit in modalità «testo semplice» su Mac. Evitate gli elaboratori di testo (Word, LibreOffice Writer), che inseriscono virgolette tipografiche.
- Scrivete l'intestazione
#EXTM3Usulla prima riga, eventualmente seguita daurl-tvg="…"se disponete di una guida. - Aggiungete ogni voce su due righe:
#EXTINF:-1 group-title="Radios",Nomepoi l'indirizzo completo, iniziando conhttp://ohttps://per un flusso di rete, o con un percorso per un file locale. - Salvate in UTF-8 senza BOM, con l'estensione
.m3uo.m3u8. - Provate la lista nel vostro lettore e correggete una a una le voci che falliscono.
Per i file locali, preferite i percorsi relativi (Films/vacances-2024.mp4) quando la playlist è nella stessa cartella dei video: la lista resta valida se spostate tutto su un altro disco. Un percorso assoluto come C:\Users\… funzionerà solo sulla macchina d'origine.
Infine, per caricare una lista in un lettore esistono in genere due opzioni: indicare il suo indirizzo web (il lettore la riscarica a ogni aggiornamento, riflettendo le modifiche della fonte) oppure importare un file locale (fisso finché non lo sostituite). In AICKO IPTV entrambi i metodi sono descritti passo per passo nella pagina Xtream Codes e M3U.
In sintesi
- Una playlist M3U è un file di testo che elenca indirizzi; non contiene alcun video.
- Inizia con
#EXTM3U, poi alterna una riga#EXTINFe una riga di indirizzo per ogni voce. - Gli attributi
tvg-id,tvg-logoegroup-titlegestiscono la guida, i loghi e le categorie. - .m3u8 significa «M3U in UTF-8», ma indica anche i manifest del protocollo HLS.
- Salvate sempre in UTF-8 senza BOM, con virgolette dritte.
Domande frequenti
Si può aprire un file M3U con il Blocco note?
Sì. È un semplice file di testo, leggibile e modificabile con qualsiasi editor. Per salvarlo scegliete la codifica UTF-8; le versioni recenti del Blocco note di Windows 10 e 11 salvano in UTF-8 senza BOM per impostazione predefinita.
Perché la mia playlist si carica ma nessun canale parte?
Il file viene letto correttamente, ma gli indirizzi che contiene non rispondono: server offline, link scaduto o accesso rifiutato. Provate un indirizzo isolato in un browser o in un altro lettore per capire se il problema viene dalla fonte o dal dispositivo.
Un file M3U è pericoloso?
Il file in sé contiene solo testo e non può essere eseguito. Il rischio viene dalla sua origine: una lista ottenuta da una fonte dubbia può puntare a contenuti diffusi illegalmente. Caricate solo liste provenienti da servizi di cui siete clienti o da editori ufficiali.
Qual è la dimensione massima di una playlist?
Il formato non fissa alcun limite. I vincoli vengono dal dispositivo: una lista di diverse decine di migliaia di voci può rallentare il caricamento su una chiavetta TV poco potente. Eliminare le categorie inutili migliora nettamente la reattività.
