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_hostsdans 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-smipour 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.jsondans le dossier de données du plugin (AES-256-GCM, clé aléatoire desecrets.keylié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).