Headend — TV en direct Jellyfin depuis Enigma2

Un récepteur Enigma2 (Vu+) comme source TV pour Jellyfin : chaînes, guide et logos de la même boîte, le flux passant par le serveur pour que la source reste cachée.

Headend transforme un récepteur satellite ou câble Enigma2 (Vu+ et autres tournant sous OpenWebif) en source de TV en direct pour Jellyfin : les chaînes, le guide des programmes et les logos de chaînes proviennent tous de la même boîte.

Ce qu’il fait

  • Chaînes : les chaînes du récepteur, lues via OpenWebif, apparaissent dans la TV en direct de Jellyfin.
  • Guide des programmes (EPG) : celui du récepteur, pour chaque chaîne.
  • Logos de chaînes (picons) : ceux du récepteur.
  • Flux via le serveur : les spectateurs lisent la chaîne depuis le serveur Jellyfin ; l’adresse du récepteur n’est jamais transmise aux applications, donc la source reste cachée. Plusieurs spectateurs de la même chaîne partagent un tuner, et un tuner occupé donne une erreur explicite.
  • Liste de chaînes sous votre contrôle : bouquets à importer, chaînes sans nom masquées, SD masquée quand la version HD existe, noms, numéros et ordre ajustables.
  • Accès par utilisateur : les nouveaux utilisateurs démarrent sans accès à la TV en direct via Headend ; vous le leur accordez depuis la page Headend.
  • Chaînes pour adultes derrière un code PIN, déverrouillées par utilisateur pendant un temps limité.

Prérequis

  • Jellyfin Server 12.2 ou plus récent.
  • Un récepteur Enigma2 avec OpenWebif, joignable depuis le serveur Jellyfin (généralement sur le même réseau).
  • jellyfin-ffmpeg (la version de ffmpeg fournie avec Jellyfin).
  • Pour le chien de garde du récepteur (optionnel, désactivé sur les nouvelles installations) : un SSH root vers le récepteur, sans mot de passe ou avec une clé.

Questions fréquentes

Puis-je regarder mes chaînes Enigma2 / Vu+ dans Jellyfin ? Oui : Headend ajoute le récepteur comme source TV, avec ses chaînes, son guide et ses logos, et fait passer le flux par le serveur Jellyfin. Voir le guide.

Ce qu’il envoie, où

Toutes les connexions ci-dessous ne démarrent qu’avec une licence valide.

  • Votre récepteur Enigma2 / Vu+ (OpenWebif, votre adresse ; port web 80, flux 8001 ; authentification facultative) : informations, état d’alimentation, bouquets, chaînes, guide (toutes les 60 min), flux des chaînes. Les clients ne voient jamais l’adresse du récepteur — les flux passent par le serveur.
  • SSH vers le récepteur (le chien de garde ; désactivé sur les nouvelles installations à partir de la version 1.0.5 jusqu’à ce que l’administrateur l’active, conservé tel quel lors des mises à jour) : vérification TCP/HTTP toutes les 3 min ; après 2 échecs, la commande de redémarrage via ssh (utilisateur root par défaut, clé facultative), puis reboot ; diagnostics collectés par SSH avant le redémarrage ; mise en veille après 10 min d’inactivité ; analyse nocturne des chaînes (02 h–06 h). La clé d’hôte SSH est vérifiée à partir de la version 1.0.5 (trust on first use) : elle est enregistrée lors de la première connexion (ssh/known_hosts dans le dossier de données), et si elle change, la commande n’est pas envoyée et un message explicite est affiché ; l’empreinte enregistrée peut être consultée et oubliée depuis la page.
  • Chaînes Internet (iptv-org) — désactivées sur les nouvelles installations à partir de la version 1.0.5 (la liste de première configuration explique ce qu’elles contactent ; lors des mises à jour, elles restent telles quelles), une fois la licence active (pays par défaut RO, MD) : télécharge le catalogue public iptv-org.github.io/api/*.json (au maximum toutes les heures, avec ETag), vérifie les flux sur les hôtes tiers des chaînes (jusqu’à 64 Ko, toutes les 24 h / 6 h) et télécharge les logos de chaînes. Ces hôtes voient l’adresse IP de votre serveur. Désactivable dans les réglages. Vos propres listes M3U (URL ou fichier) sont facultatives.
  • Guide externe (EPG) — désactivé sur les nouvelles installations à partir de la version 1.0.5 (case à cocher de la liste de première configuration ; lors des mises à jour, il reste tel quel), chaque jour à 04 h 00, avec 2 s entre les requêtes : www.programetv.ro, www.cinemagia.ro, epgshare01.online, open-epg.com (+ votre propre XMLTV, désactivé par défaut). Seules les pages et fichiers de programme sont demandés ; aucune donnée utilisateur n’est envoyée. Les images de programme sont transmises au serveur sous forme d’URL externes (le serveur peut les télécharger).
  • Logos depuis un lien : uniquement sur action de l’administrateur (10 Mo maximum). Le plugin ne télécharge aucun pack de picons.
  • En local : nvidia-smi pour la surveillance du GPU.
  • Les pages ne chargent aucune ressource externe.
  • Plus le client de licence, le même dans chaque plugin : voir Licence et confidentialité dans nos plugins.

Stocké localement :

  • Détails du récepteur (adresse, ports, utilisateur OpenWebif) dans la configuration du serveur ; à partir de la version 1.0.5, le mot de passe OpenWebif est chiffré au repos dans secrets.enc.json dans le dossier de données du plugin (AES-256-GCM, clé aléatoire de secrets.key liée à l’identifiant du serveur, les deux fichiers en mode 600) et n’est jamais envoyé au navigateur (la page affiche seulement « set ✓ ») ; les versions antérieures le conservent en clair (dans la configuration du plugin). Pour SSH, seuls le chemin de la clé et la clé d’hôte publique du récepteur (ssh/known_hosts) sont stockés.
  • Code PIN des chaînes pour adultes : hachage PBKDF2-SHA256 uniquement (200 000 itérations, avec sel). À partir de la version 1.0.6, les nouveaux codes PIN comportent au moins 6 chiffres (un code PIN existant continue de fonctionner) et les tentatives erronées sont limitées par des blocages croissants qui survivent à un redémarrage.
  • history.json : démarrages de chaînes des dernières 24 h et utilisation par minute (sans noms d’utilisateur) ; le guide (historique de 24 h), le catalogue iptv-org, le tampon de diffusion en direct dans le cache du serveur.
  • L’export « Backup » de l’administrateur contient la configuration du plugin ; à partir de la version 1.0.6, il ne contient plus le hachage du PIN (les versions antérieures l’incluent). Les adresses des listes IPTV, des guides et des logos ne peuvent pas atteindre le réseau local ni le serveur lui-même (sauf le récepteur configuré), sauf si l’administrateur active « Local network IPTV sources » (activé automatiquement lors d’une mise à jour si des sources enregistrées sont déjà sur le réseau local) ; les adresses IPTV sont journalisées sans compte ni mot de passe.

Compatibilité des clients

  • Les chaînes, le guide, les flux, le blocage des chaînes pour adultes et les préférences audio/sous-titres sont servis via la TV en direct du serveur : 🟢 cela devrait fonctionner dans toute application avec TV en direct.
  • ✅ Jellyfin Web : lecture réelle (HD 4,4–4,7 s, SD convertie 5,2 s), de bout en bout 17/17, adultes 11/11.
  • Applications Jellyfin (Android/Android TV, Swiftfin, Findroid, Kodi/JellyCon, Infuse, Streamyfin), navigateurs de téléviseurs : ❔ non testés.
  • Navigateur uniquement : la page d’administration, la page « TV » (style Netflix), la page « Adult channels ». Dans les applications, le PIN se déverrouille depuis un navigateur à /Headend/Unlock (par compte ; ✅ Chrome, téléphone).
  • Jellyfin officiel : le lien de la page « TV » s’ajoute manuellement dans config.json (menuLinks) ; sur medialab Server, il apparaît automatiquement.

Légende : ✅ vérifié (test de bout en bout ou sur l’appareil) · 🟢 côté serveur, fonctionne avec tout client (par conception, aucun test par client) · ➖ sans objet · ❔ non testé.

Licence

Le plugin est open source (GPL-3.0). Les versions compilées prêtes à l’installation sont publiques, comme le code source. Ce que vous achetez, c’est l’abonnement : la licence d’utilisation du plugin sur un serveur Jellyfin, les mises à jour incluses dans votre formule et le support : chaque mise à jour tant que l’abonnement est actif, via votre dépôt de plugins privé, et de l’aide quand quelque chose ne fonctionne pas. Le plugin vérifie la clé d’abonnement une fois par jour ; sans abonnement valide, il s’arrête jusqu’au renouvellement (rien n’est supprimé). Mensuel, annuel ou à vie (la licence à vie inclut un an de mises à jour), ou inclus dans le pack Jellyfin. Essai gratuit de 30 jours.

Code source. Pour chaque version, le code source complet correspondant est public, à côté de la version compilée, dans l’historique des versions, et aussi dans votre compte (Compte → Licences, Code source) ; chaque archive contient le texte intégral de la GPL-3.0 (LICENSE). Si vous avez besoin du code source d’une version que vous ne pouvez plus télécharger, demandez-nous et nous vous l’envoyons. Voir la section 10 de la Licence (CLUF).

Fonctionne au mieux avec medialab Server

Ce plugin fonctionne sur Jellyfin officiel 12.2 ou plus récent. Sur medialab Server, notre serveur basé sur Jellyfin, avec les mêmes données, bibliothèques, utilisateurs et applications, il fonctionne mieux :

  • Verified – medialab. Le serveur vérifie la signature de nos plugins et vous montre que les fichiers sont exactement ceux que nous avons publiés. Un plugin modifié après sa publication est signalé.
  • Intégré à l’interface. Les plugins peuvent ajouter des boutons et des liens dans le menu de vos utilisateurs (par exemple « TV », « Share ») sans configuration web manuelle.
  • Prioritaire par défaut. Les plugins medialab passent en premier là où cela compte : tuners TV en direct, sources de guide et fournisseurs de sous-titres. L’ordre reste le vôtre : vous pouvez le modifier à tout moment.
  • Le catalogue medialab.works inclus, avec une installation sans confirmations supplémentaires.
  • Mises à jour depuis l’interface web, sans terminal (avec Self-Update de MediaLab) : vérifiez, mettez à jour et revenez en arrière depuis le tableau de bord ; si une nouvelle version ne démarre pas, le serveur revient de lui-même à la version précédente, avec vos données intactes.
  • Le même Jellyfin, à jour. medialab Server suit chaque semaine les versions stables de Jellyfin 12.x ; une nouvelle version n’est publiée qu’après avoir réussi tous les tests, y compris ceux de nos plugins.

Headend: La TV en direct démarre plus vite (analyse de flux plus courte, premiers segments HLS plus courts) et la page « TV » apparaît dans le menu de vos utilisateurs ; les tuners Headend viennent en premier dans « Add tuner device ».

Les applications Jellyfin (Android, iOS, TV, web) se connectent exactement comme à Jellyfin officiel.

Pour l’installer, lancez l’image de conteneur (guide) ou, sur Debian 12, les paquets apt, qui remplacent jellyfin-server et jellyfin-web en conservant vos données en place (guide).

medialab Server est un logiciel libre (GPL-2.0), basé sur Jellyfin. Le code source est public : medialab-server et medialab-server-web.

Configuration requise

  • Jellyfin Server 12.2 ou plus récent (Linux, Windows ou Docker)
  • Un récepteur Enigma2 avec OpenWebif sur le même réseau
  • Open source (GPL-3.0) : le code source de chaque version est dans votre compte

Dernière version

1.0.8
publiée le 20 oct. 2026
Voir toutes les modifications →

La version compilée est publique ; l’utilisation du plugin nécessite une licence ou l’essai gratuit de 30 jours.