La playlist ne se charge pas : les six causes que nous voyons le plus
L’une d’elles est un produit de sécurité sur votre propre machine qui bloque la connexion pendant que tous les flux continuent de fonctionner. C’est celle qui prend le plus de temps à trouver.
Une playlist qui ne se charge pas, c’est généralement l’une de 6 choses. Elles sont listées à peu près par ordre de fréquence, sauf la troisième, qui est déplacée parce que c’est celle qui fait perdre le plus de temps.
1. Les identifiants ont expiré, ou la ligne a été suspendue
La réponse la plus terne et la plus fréquente. Les fournisseurs font expirer les lignes, et une connexion refusée et un hôte injoignable se ressemblent de l’extérieur, si bien que l’échec se lit souvent comme un problème réseau.
Testez-le hors de l’application : ouvrez l’adresse du portail dans un navigateur et voyez s’il répond. S’il vous refuse là aussi, rien sur votre machine n’est en cause.
2. Vous êtes à votre limite de connexions
Un import ou un rafraîchissement peut avoir besoin d’une connexion à lui, et une ligne qui en autorise 2 avec 2 déjà en usage n’en a aucune à donner. L’échec est intermittent et ne suit aucun motif visible, parce qu’il dépend de ce que font les autres membres du foyer.
Arrêtez tous les autres flux et réessayez une fois. Si cela fonctionne, le diagnostic est posé. Connexions maximales couvre la comptabilité, y compris pourquoi une connexion peut rester consommée un moment après que vous avez cessé de regarder.
3. Un produit de sécurité sur votre propre machine bloque la connexion
Celle-ci est déplacée parce que c’est la plus coûteuse.
Le symptôme est spécifique et trompeur : les flux fonctionnent parfaitement, et l’appel de connexion ou de rafraîchissement échoue. Même hôte, mêmes identifiants, même réseau. Tout indique que le fournisseur est en panne.
Ce qui se passe, c’est que l’appel API d’un portail transporte le nom d’utilisateur et le mot de passe comme paramètres de requête, et pour l’heuristique d’un produit de sécurité, cela ressemble exactement à une fuite d’identifiants en HTTP clair. Il bloque donc cette requête et laisse les URL de flux tranquilles, parce que celles-ci n’ont pas la même forme.
Nous l’avons rencontré sur une machine de développement et il m’a fallu longtemps pour le voir, précisément parce que tout ce qui indique normalement une installation fonctionnelle fonctionnait. J’ai d’abord accusé le fournisseur. Le test qui l’identifie : essayez le même compte sur une autre machine du même réseau. Si celle-là se connecte sans problème, le problème est un logiciel local. Mettre l’hôte en liste blanche dans votre produit de sécurité le corrige.
4. C’est une URL, mais pas le bon type d’URL
Les fournisseurs distribuent plusieurs adresses et elles ne sont pas interchangeables. Une adresse de portail, une URL d’export de playlist et une URL de guide se ressemblent et font des choses différentes.
Les trois formes, que les fournisseurs étiquettent rarement :
portal http://line.example.com:8080 host + username + password
playlist http://line.example.com:8080/get.php?username=...&type=m3u_plus
guide http://line.example.com:8080/xmltv.php?username=...
Si vous avez un nom d’utilisateur, un mot de passe et un hôte, ajoutez-les comme source Xtream plutôt que de coller une URL de playlist générée. Vous obtenez des catégories, un compte de connexions et le replay qu’un export à plat ne peut pas exprimer. M3U ou l’API Xtream couvre la différence.
Les URL sont acceptées jusqu’à 2048 caractères, donc la longueur est rarement le problème. Copiez-collez plutôt que de taper. Un seul caractère erroné dans un jeton échoue exactement comme des identifiants expirés.
5. Le compte est à 10 playlists cloud
Le plafond est de 10, et la vérification s’exécute au début d’un envoi plutôt qu’à sa fin, si bien que vous le découvrez avant d’avoir dépensé la bande passante. Supprimez-en une que vous n’utilisez plus.
6. Le fichier lui-même est mal formé
C’est le cas où « ajoutée avec succès » et « fonctionne sur votre appareil » sont deux événements différents.
Le serveur n’analyse pas votre playlist. Un import de fichier est stocké chiffré et un import d’URL enregistre l’adresse ; l’analyse se fait sur l’appareil qui va lire le contenu. Une source peut donc être ajoutée à votre compte sans broncher, puis échouer sur une machine. Ce n’est pas une contradiction.
Ce qui se casse à l’intérieur des fichiers est plus banal que ce que les gens imaginent. Un jeu de 51 fichiers réels a révélé 3 défauts distincts, chacun capable de perdre toutes les données d’un fournisseur sur un seul octet : une esperluette non échappée, un fichier déclarant UTF-8 tout en portant des octets Latin-1, et un caractère de contrôle égaré. Les 3 sont désormais réparés plutôt que fatals, et les réparations sont comptées, si bien qu’un fichier qui a eu besoin d’un correctif le dit. Une entrée compressée est identifiée par ses premiers octets plutôt que par son nom, et la décompression s’arrête à 2 Gio de sortie ou à 400 fois la taille compressée, si bien qu’une URL qui promet une chose et sert une autre fonctionne quand même, et qu’une archive hostile ne remplit pas un disque.
Lent n’est pas cassé
Écartez ce cas avant de conclure quoi que ce soit. Une seule source de production dans notre échantillon contenait environ 77 842 titres répartis sur environ 444 catégories. Analyser et indexer cela au premier import prend un vrai temps, et un appareil qui semble bloqué travaille peut-être.
Accordez quelques minutes à un premier import. Chaque lancement suivant est rapide, parce que l’index est construit une fois.
Si la source se charge et que les chaînes sont là mais que la grille est vide, c’est un autre problème : un guide vide. Si les chaînes se chargent mais ne se lisent pas, corriger la mise en mémoire tampon et les saccades commence par la classification.
Ce que cet article a mesuré21 affirmations, chacune avec les preuves derrière elles
| Réclamation | Preuve | Compté |
|---|---|---|
| L’analyse se fait sur votre appareil, pas sur nos serveurs, si bien qu’un import peut réussir au niveau du compte et échouer quand même sur une machine. | n = 1 | 31 août 2026 |
| Un produit de sécurité local peut bloquer le point d’accès API d’un portail tout en laissant passer les URL de flux, parce que l’appel API transporte le nom d’utilisateur et le mot de passe dans la chaîne de requête et qu’une heuristique y lit une fuite d’identifiants. | n = 1 | 31 août 2026 |
| Une URL de guide ou de playlist est acceptée jusqu’à 2048 caractères, ce qui est assez long pour les URL porteuses de jetons que les fournisseurs distribuent. | n = 1 | 31 août 2026 |
| Un compte détient au plus 10 playlists cloud, et la vérification s’exécute à l’initialisation d’un envoi plutôt qu’à son achèvement. | n = 1 | 31 août 2026 |
| Trois défauts d’encodage distincts, chacun capable de perdre toutes les données d’un fournisseur sur un seul mauvais octet, ont été trouvés par un jeu de 51 fichiers de test : une esperluette non échappée, de l’UTF-8 déclaré sur des octets Latin-1, et un caractère de contrôle égaré. | n = 51 | 16 août 2026 |
| Une seule source de production dans notre propre échantillon portait environ 77 842 titres répartis sur environ 444 catégories, si bien qu’une première analyse lente n’est pas le même symptôme qu’une analyse échouée. | n = 1 | 31 août 2026 |
| Une entrée compressée est identifiée par ses premiers octets plutôt que par son nom de fichier, si bien qu’une URL dont l’extension promet une chose et sert une autre fonctionne quand même, et qu’une page d’erreur HTML est rejetée comme non XML plutôt que comme un échec de décompression. | n = 4 | 1 sept. 2026 |
| Les échecs sont classés en huit types plutôt qu’en une seule erreur, ce qui garde une limite de taille, une limite de décompression et une limite de sécurité distinctes d’un échec réseau ordinaire. | n = 8 | 1 sept. 2026 |
| Une source compressée est bornée deux fois, à 2 Gio de sortie et à 400 fois sa taille compressée, si bien qu’une archive trop volumineuse ou hostile s’arrête tôt plutôt que de remplir un disque. | n = 2 | 1 sept. 2026 |
| Une analyse rapporte les comptes conservés et écartés à côté des tailles compressée et décompressée, ce qui distingue un téléchargement tronqué d’un fichier qui avait simplement peu de contenu dans la plage. | n = 7 | 1 sept. 2026 |
| Un flux qui ne s’ouvre pas du tout est une classe de défaut distincte d’un flux qui s’ouvre puis cale, si bien qu’un problème d’identifiants et un blocage réseau ne sont pas signalés de la même façon. | n = 1 | 1 sept. 2026 |
| Un défaut dans les 15 premières secondes envoie l’échelle de récupération directement vers un changement de source plutôt qu’une nouvelle tentative, au motif que la source n’a jamais fait ses preuves. | n = 1 | 1 sept. 2026 |
| Seul 1 redémarrage d’une adresse défaillante est tenté avant de changer de source, parce que les données de terrain ont montré qu’un second redémarrage d’une source morte n’aide jamais. | n = 1 | 1 sept. 2026 |
| Les nouvelles tentatives reculent exponentiellement avec une gigue jusqu’à un plafond de 30 secondes, puis continuent en arrière-plan toutes les 60 secondes et s’arrêtent entièrement après 30 minutes, ce qui protège un fournisseur d’une tempête de reconnexions. | n = 4 | 1 sept. 2026 |
| Treize types d’état de compte se synchronisent entre appareils et aucun d’eux n’est la playlist elle-même : ce qui se synchronise, c’est la définition de la source et vos décisions à son sujet. | n = 13 | 1 sept. 2026 |
| La combinaison de fournisseurs est stockée comme une définition et résolue sur l’appareil, si bien qu’un problème avec une source combinée est un problème de résolution locale plutôt qu’un problème serveur. | n = 1 | 1 sept. 2026 |
| Si un profil de connexion est configuré, un schéma que le relais ne peut pas transporter échoue de façon fermée plutôt que de se connecter discrètement en direct, si bien qu’une source qui fonctionnait avant l’ajout d’un profil refuse peut-être de fuir plutôt que d’être cassée. | n = 1 | 25 août 2026 |
| Un diagnostic en neuf étapes est livré avec la fonctionnalité de connexion, ce qui est un premier geste plus rapide que de changer les réglages quand une source ne se connecte pas via un profil. | n = 1 | 25 août 2026 |
| Mesurée sur 2 203 entrées, la couverture de l’identifiant de guide était de 100 pour cent dans une playlist et de 73.5 pour cent dans une autre, avec 20 entrées portant un attribut présent mais vide. | n = 2203 | 31 août 2026 |
| Un attribut d’identifiant présent et vide est un état différent d’un attribut absent, et le traiter comme une valeur joindrait chaque entrée de ce type à toutes les autres. | n = 20 | 31 août 2026 |
| Un flux qui ne s’ouvre pas du tout est classé séparément d’un flux qui s’ouvre puis cale, si bien qu’un échec d’ouverture est une classe de défaut distincte plutôt qu’une erreur générique. | n = 1 | 31 août 2026 |