Déployer un service de playlist IPTV à mise à jour automatique avec Docker

Une fois qu'une playlist dépasse quelques dizaines de chaînes, la maintenance manuelle n'est plus réaliste : renommer une chaîne oblige à éditer un fichier, ajouter un nouvel appareil oblige à réimporter. Faire tourner un service de playlist léger avec Docker permet au NAS de générer périodiquement et d'exposer une adresse fixe, tous les lecteurs de la maison récupérant depuis cette seule adresse.

Cet article traite de l'approche de déploiement et de l'écriture du Compose, les sources utilisées étant celles que vous avez le droit d'utiliser (adresses multicast fournies par l'opérateur, sources auto-hébergées).

I. Approche globale

  1. Prendre la liste des sources (nom de chaîne + adresse) comme entrée, placée dans un répertoire du NAS ;
  2. utiliser un container pour exécuter périodiquement « détection + génération du m3u » ;
  3. le m3u généré est exposé via un port Web, les lecteurs renseignent directement cette URL ;
  4. le container écrit également sur disque les résultats de détection et les logs, pour faciliter le retour en arrière.

II. Préparation des répertoires

Créer d'abord la structure de répertoires sur le NAS, le container y monte à la fois les entrées et les sorties :

docker/
└── iptv/
    ├── data/          # 输出:生成的 m3u、日志
    │   └── playlist.m3u
    ├── source.txt     # 输入:你自己的频道清单
    └── docker-compose.yml

Format du fichier d'entréeDéfinissez-le simplement vous-même, une chaîne par ligne :

CCTV-1 综合|udp://@239.x.x.x:1234
湖南卫视|rtp://239.x.x.x:5678

III. docker-compose.yml

services:
  iptv:
    image: <你选用的镜像>
    container_name: iptv
    restart: unless-stopped
    ports:
      - "50086:50086"
    volumes:
      - ./data:/app/data
      - ./source.txt:/app/source.txt:ro
    environment:
      - TZ=Asia/Shanghai
      - CHECK_TIMEOUT=5          # 单个地址检测超时(秒)
      - CHECK_CONCURRENCY=8      # 并发数,别设太大
      - CRON=0 4 * * *           # 每天凌晨 4 点跑一次

Démarrage :

docker compose up -d
docker compose logs -f      # 观察首次生成的输出

IV. Vérification et utilisation

  1. Accès via navigateur http://你的NAS_IP:50086/playlist.m3u, si le contenu est visible, cela signifie que le service fonctionne normalement ;
  2. Dans le lecteur, « Ajouter une source → Importer depuis une URL », saisissez l'adresse ci-dessus ;
  3. Après avoir modifié la liste des sources, redémarrez une fois le container, ou attendez que la tâche planifiée génère automatiquement à l'heure prévue ;
  4. Le m3u généré peut être lu directement par les plugins IPTV de Jellyfin / Emby / Plex, il suffit de configurer séparément l'adresse XMLTV pour le guide des programmes.

Cinq, quelques points pratiques

  • Ne pas ouvrir trop de concurrence: lancer des connexions simultanées vers des centaines d'adresses sature facilement le router domestique, ce qui provoque au contraire un grand nombre de faux diagnostics.
  • Versionner les résultats: conserver une copie datée du fichier généré chaque jour, en cas de problème on peut comparer à partir de quel jour cela a changé.
  • Conserver suffisamment de logs: les logs du container ne sont utiles que lors du diagnostic, il est recommandé de les écrire dans un fichier avec une limite de taille par fichier, pour éviter de remplir le NAS.
  • Ne pas exposer de port vers l'extérieur: ce service est destiné à un usage domestique uniquement, ne pas mapper le port vers l'Internet public ; si un accès externe est vraiment nécessaire, passer par un VPN, ne pas l'exposer directement.
  • Fixer l'IP interne: attribuer au NAS une adresse statique ou une réservation DHCP, sinon en cas de changement d'IP, tous les lecteurs devront être reconfigurés.

VI. Questions fréquentes

Le container démarre mais le m3u est vide Vérifiez d'abord dans les logs si le fichier d'entrée est bien lu ; confirmez ensuite que le séparateur et l'encodage de la liste source sont corrects.
Tous les résultats de détection sont en échec Vérifiez d'abord si le réseau du container peut accéder au multicast (la plupart des réseaux bridge par défaut ne le peuvent pas), essayez le mode réseau host.
Le lecteur indique une adresse invalide Ouvrez l'URL avec VLC sur un ordinateur pour vérifier une fois, afin de distinguer s'il s'agit d'un problème de service ou de lecteur.
La tâche planifiée ne se déclenche pas Vérifiez le réglage du fuseau horaire du container, CRON suit l'heure du container.

Résumé

En chaînant « détection + génération + distribution » avec des containers, la maintenance de la playlist passe de « édition manuelle de fichiers » à « modifier une ligne de la liste source, le reste est confié aux tâches planifiées ». La valeur de ce flux réside dans le fait que vouspour les sources que vous avez le droit d'utilisereffectuez une gestion unifiée — le nombre de sources n'est pas élevé, mais elles sont contrôlables, maintenables et réversibles, c'est là la clé pour fonctionner sur le long terme.

THE END