Publié le · par l’équipe AICKO IPTV · 9 min de lecture

Un fichier texte, pas un contenu

Le format M3U est né dans les années 1990 avec les lecteurs audio de bureau, notamment Winamp, pour enregistrer une liste de morceaux à enchaîner. Son principe n'a pas changé depuis : une playlist M3U est un fichier texte brut qui contient une suite d'adresses (chemins locaux ou URL) que le lecteur ouvre dans l'ordre. Il ne contient ni image, ni son, ni vidéo. Il se contente de dire au lecteur où aller chercher chaque flux et comment l'afficher.

C'est ce qui explique deux choses souvent mal comprises. D'abord, un fichier M3U de quelques centaines de kilo-octets peut « contenir » des milliers d'entrées : il n'y a dedans que du texte. Ensuite, la playlist ne vaut que par les adresses qu'elle référence : si le serveur visé est hors ligne, le fichier reste parfaitement valide, mais rien ne se lance. Un lecteur comme un lecteur vidéo multimédia ne fait qu'interpréter ces lignes ; la légalité et la disponibilité des flux dépendent entièrement de leur source, et vous devez détenir les droits sur ce que vous regardez.

On rencontre aujourd'hui des playlists M3U dans trois situations principales : les listes de fichiers audio ou vidéo stockés sur un disque ou un NAS, les listes de radios et de chaînes diffusées en ligne par leurs éditeurs, et les listes fournies par un service de télévision auquel vous êtes abonné.

La structure minimale : #EXTM3U et #EXTINF

Une playlist dite « étendue » (Extended M3U) commence obligatoirement par l'en-tête #EXTM3U sur la toute première ligne. Chaque entrée occupe ensuite deux lignes : une ligne de description qui commence par #EXTINF, puis la ligne de l'adresse elle-même. Voici un exemple complet et valide, avec deux radios fictives :

#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

Décomposons la ligne #EXTINF:-1,Radio Exemple Info :

  • #EXTINF: annonce les informations de l'entrée qui suit.
  • -1 est la durée en secondes. Pour un morceau de musique, on indiquerait par exemple 215 ; pour un flux en direct, qui n'a pas de fin, la convention est -1 (certaines listes mettent 0, ce que la plupart des lecteurs tolèrent).
  • la virgule sépare la partie technique du nom affiché. Tout ce qui suit la dernière virgule des attributs est le titre que verra l'utilisateur.

Les lignes qui commencent par # et ne sont pas des directives connues sont traitées comme des commentaires et ignorées. Les lignes vides sont en principe tolérées, mais il vaut mieux les éviter entre un #EXTINF et son adresse : certains lecteurs perdent alors l'association entre le nom et le flux.

Les attributs étendus : tvg-id, tvg-logo, group-title

Pour les listes de chaînes, un usage s'est imposé : ajouter des attributs entre la durée et la virgule, sous la forme nom="valeur". Ils ne font partie d'aucune norme officielle, mais presque tous les lecteurs de télévision les reconnaissent.

#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
AttributRôleErreur fréquente
tvg-idIdentifiant qui relie la chaîne à son guide des programmes (EPG).Identifiant différent de celui du fichier XMLTV : le guide reste vide.
tvg-nameNom « technique », parfois utilisé à la place du tvg-id pour la correspondance EPG.Espaces ou accents différents du guide.
tvg-logoAdresse de l'image affichée à côté de la chaîne.Lien en http bloqué par l'appareil, ou image trop lourde.
group-titleCatégorie dans laquelle la chaîne est rangée (Sport, Info, Jeunesse…).Fautes de frappe qui créent deux catégories presque identiques.
tvg-shiftDécalage horaire du guide, en heures, pour cette chaîne.Utilisé pour compenser un fuseau mal déclaré à la source.
catchup, catchup-daysIndiquent qu'un rattrapage (replay) est possible et sur combien de jours.Ignorés par les lecteurs qui ne gèrent pas le rattrapage.

Sur la ligne d'en-tête, l'attribut url-tvg (ou sa variante x-tvg-url) indique l'adresse du guide des programmes au format XMLTV. Le fonctionnement de ce guide est détaillé dans notre article sur l'EPG et le format XMLTV.

Deux règles de syntaxe évitent la majorité des problèmes : les valeurs sont toujours entre guillemets droits (", jamais « » ni “ ”), et le nom affiché ne doit pas contenir de guillemets non échappés. Une virgule dans une valeur entre guillemets est acceptée par les bons analyseurs, mais une virgule dans le nom de chaîne lui-même peut tronquer le titre chez certains lecteurs.

M3U ou M3U8 : quelle différence ?

L'extension .m3u8 désigne à l'origine une playlist M3U encodée en UTF-8. Le « 8 » vient de là. Un fichier .m3u classique, lui, était historiquement lu dans l'encodage local du système (souvent Windows-1252 en Europe de l'Ouest), ce qui transformait « Généralistes » en « Généralistes » quand on ouvrait sur une machine un fichier écrit sur une autre.

En 2009, Apple a repris cette extension pour son protocole de diffusion HLS (HTTP Live Streaming), normalisé ensuite dans la RFC 8216. Un fichier .m3u8 peut donc désigner deux choses bien différentes :

  • une liste de chaînes ou de morceaux, écrite par un humain ou un service, que vous chargez dans votre lecteur ;
  • un manifeste HLS, généré automatiquement par un serveur de diffusion, qui liste les petits segments vidéo de quelques secondes d'une seule chaîne ou d'un seul film.

Le second contient des directives propres à HLS, comme #EXT-X-TARGETDURATION ou #EXT-X-STREAM-INF. Si vous ouvrez une adresse et que vous voyez défiler des noms du type segment_10452.ts, vous regardez un manifeste HLS, pas une playlist de chaînes. Notre article HLS, MPEG-TS et DASH explique ce mécanisme en détail.

En pratique, les lecteurs actuels lisent indifféremment .m3u et .m3u8 et détectent l'UTF-8 dans la plupart des cas. Le plus sûr reste d'enregistrer toujours vos playlists en UTF-8, quelle que soit l'extension.

Encodage, BOM et fins de ligne : les pièges invisibles

Beaucoup de playlists « qui ne marchent pas » sont parfaitement écrites… mais mal enregistrées. Trois détails invisibles à l'écran posent problème.

Le BOM UTF-8

Certains éditeurs, dont d'anciennes versions du Bloc-notes de Windows, ajoutent au début du fichier trois octets invisibles appelés BOM (Byte Order Mark : EF BB BF en hexadécimal). Un lecteur strict qui vérifie que le fichier commence exactement par #EXTM3U voit alors #EXTM3U et rejette la liste, ou ignore la première entrée. La solution : enregistrer en « UTF-8 » et non en « UTF-8 avec BOM ». Dans Notepad++, le menu Encodage propose explicitement les deux options ; dans Visual Studio Code, l'encodage s'affiche en bas à droite de la fenêtre et se change d'un clic.

Les accents mal convertis

Si les noms s'affichent avec des séquences comme é ou des losanges �, le fichier a été écrit dans un encodage et lu dans un autre. Rouvrez-le dans un éditeur qui permet de choisir l'encodage de lecture (Windows-1252 ou ISO-8859-1 si les accents redeviennent corrects), puis réenregistrez-le en UTF-8.

Les fins de ligne

Windows termine les lignes par deux caractères (CR LF), Linux, macOS et Android par un seul (LF). Les lecteurs récents acceptent les deux, mais un CR résiduel collé à la fin d'une URL peut la rendre invalide sur un serveur pointilleux. En cas de doute, convertissez en LF, ce que proposent les éditeurs de code.

Les erreurs de syntaxe les plus courantes

Voici les défauts que l'on retrouve le plus souvent en ouvrant une playlist récalcitrante, avec leur symptôme et leur correction.

SymptômeCause probableCorrection
« Fichier invalide » dès l'ouvertureEn-tête #EXTM3U absent, mal orthographié ou précédé d'un BOMPlacer #EXTM3U seul sur la ligne 1, enregistrer en UTF-8 sans BOM
Les noms sont décalés d'une chaîneUne URL manquante ou une ligne #EXTINF en doubleVérifier l'alternance stricte description / adresse
Toutes les chaînes s'appellent « -1 »Virgule manquante avant le nomÉcrire #EXTINF:-1 attributs,Nom
Catégories et logos ignorésGuillemets typographiques ou apostrophes à la place de "Remplacer par des guillemets droits
Une seule entrée ne se lance pasEspace en fin d'URL, caractère non encodé (espace, accent) dans l'adresseSupprimer les espaces, encoder l'espace en %20
Le fichier téléchargé est une page HTMLL'adresse renvoie une page d'erreur ou de connexion au lieu de la listeOuvrir l'adresse dans un navigateur pour lire le message du serveur

Pour les très grandes listes, un dernier réflexe utile : compter les lignes #EXTINF et les lignes d'adresses. Sous Windows, PowerShell le fait avec (Select-String -Path liste.m3u -Pattern '^#EXTINF').Count. Les deux nombres doivent être égaux.

Créer et éditer sa propre playlist

Construire une playlist à la main est simple et permet de regrouper, par exemple, les radios et chaînes que leurs éditeurs diffusent gratuitement sur leurs propres sites, ou les vidéos de votre NAS. La méthode :

  1. Ouvrez un éditeur de texte qui maîtrise l'encodage : Notepad++ ou Visual Studio Code sur Windows, TextEdit en mode « texte brut » sur Mac. Évitez les traitements de texte (Word, LibreOffice Writer), qui insèrent des guillemets typographiques.
  2. Écrivez l'en-tête #EXTM3U sur la première ligne, éventuellement suivi de url-tvg="…" si vous disposez d'un guide.
  3. Ajoutez chaque entrée sur deux lignes : #EXTINF:-1 group-title="Radios",Nom puis l'adresse complète, en commençant par http:// ou https:// pour un flux réseau, ou par un chemin pour un fichier local.
  4. Enregistrez en UTF-8 sans BOM, avec l'extension .m3u ou .m3u8.
  5. Testez la liste dans votre lecteur et corrigez les entrées qui échouent une par une.

Pour les fichiers locaux, préférez les chemins relatifs (Films/vacances-2024.mp4) quand la playlist est rangée dans le même dossier que les vidéos : la liste reste valable si vous déplacez l'ensemble sur un autre disque. Un chemin absolu comme C:\Users\… ne fonctionnera que sur la machine d'origine.

Enfin, pour charger une liste dans un lecteur, deux options existent en général : indiquer son adresse web (le lecteur la retélécharge à chaque actualisation, ce qui reflète les mises à jour de la source) ou importer un fichier local (figé tant que vous ne le remplacez pas). Dans AICKO IPTV, les deux méthodes sont décrites pas à pas dans la page Xtream Codes et M3U.

En résumé

  • Une playlist M3U est un fichier texte qui liste des adresses ; elle ne contient aucune vidéo.
  • Elle commence par #EXTM3U, puis alterne une ligne #EXTINF et une ligne d'adresse pour chaque entrée.
  • Les attributs tvg-id, tvg-logo et group-title gèrent le guide, les logos et les catégories.
  • .m3u8 signifie « M3U en UTF-8 », mais désigne aussi les manifestes du protocole HLS.
  • Enregistrez toujours en UTF-8 sans BOM, avec des guillemets droits.

Questions fréquentes

Peut-on ouvrir un fichier M3U avec le Bloc-notes ?

Oui. C'est un simple fichier texte, lisible et modifiable avec n'importe quel éditeur. Pour l'enregistrer, choisissez l'encodage UTF-8 ; les versions récentes du Bloc-notes de Windows 10 et 11 enregistrent en UTF-8 sans BOM par défaut.

Pourquoi ma playlist se charge-t-elle mais aucune chaîne ne démarre ?

Le fichier est lu correctement, mais les adresses qu'il contient ne répondent pas : serveur hors ligne, lien expiré ou accès refusé. Testez une adresse isolée dans un navigateur ou un autre lecteur pour savoir si le problème vient de la source ou de l'appareil.

Un fichier M3U est-il dangereux ?

Le fichier lui-même ne contient que du texte et ne peut pas s'exécuter. Le risque vient de son origine : une liste obtenue auprès d'une source douteuse peut pointer vers des contenus diffusés illégalement. Ne chargez que des listes provenant de services dont vous êtes client ou d'éditeurs officiels.

Quelle est la taille maximale d'une playlist ?

Le format ne fixe aucune limite. Les contraintes viennent de l'appareil : une liste de plusieurs dizaines de milliers d'entrées peut ralentir le chargement sur une clé TV peu puissante. Supprimer les catégories inutiles améliore nettement la réactivité.

Pour aller plus loin

À lire aussi

🧩

Formats et technique

Comment fonctionne une connexion Xtream Codes

Serveur, port, identifiant, player_api.php, catégories, films, séries, expiration et connexions simultanées : le fonctionnement d'une connexion Xtream Codes.

Lire l’article
🧩

Formats et technique

EPG et XMLTV : d'où vient le guide des programmes

Structure d'un fichier XMLTV, correspondance tvg-id, fuseaux horaires, guide vide ou décalé d'une heure : comprendre et réparer le guide des programmes.

Lire l’article
🧩

Formats et technique

HLS, MPEG-TS, DASH : les protocoles du streaming vidéo

Segments, manifestes, débit adaptatif, latence et compatibilité des appareils : comprendre HLS, MPEG-TS et MPEG-DASH, les trois formats du streaming vidéo.

Lire l’article

Téléchargez AICKO IPTV

L'application est gratuite et fonctionne avec votre propre abonnement IPTV. Choisissez votre appareil : le lien mobile vous envoie automatiquement vers le bon store.

Android et iOS Version mobile Windows 10 et 11 Version PC Samsung, Android TV, Fire TV Version télévision
Télécharger dans l'App Store Disponible sur Google Play