Headend convierte un receptor de satélite o cable Enigma2 (Vu+ y otros con OpenWebif) en una fuente de TV en directo para Jellyfin: los canales, la guía de programación y los logos de canal proceden del mismo aparato.
Qué hace
- Canales del receptor, leídos a través de OpenWebif, que aparecen en la TV en directo de Jellyfin.
- Guía de programación (EPG) del receptor, para cada canal.
- Logos de canal (picons) del receptor.
- Stream a través del servidor: los espectadores reproducen el canal desde el servidor de Jellyfin; la dirección del receptor nunca se entrega a las apps, así que la fuente queda oculta. Varios espectadores del mismo canal comparten un sintonizador, y un sintonizador ocupado da un error claro.
- Lista de canales bajo tu control: bouquets que importar, canales sin nombre ocultos, SD oculto cuando existe la versión HD, y nombres, números y orden ajustables.
- Acceso por usuario: los usuarios nuevos empiezan sin acceso a la TV en directo a través de Headend; tú se lo concedes desde la página de Headend.
- Canales para adultos detrás de un PIN, desbloqueados por usuario durante un tiempo limitado.
Requisitos
- Jellyfin Server 12.2 o posterior.
- Un receptor Enigma2 con OpenWebif, accesible desde el servidor de Jellyfin (normalmente en la misma red).
- jellyfin-ffmpeg (la compilación de ffmpeg que incluye Jellyfin).
- Para el vigilante del receptor (opcional, desactivado en instalaciones nuevas): SSH como root al receptor, sin contraseña o con clave.
Preguntas frecuentes
¿Puedo ver mis canales de Enigma2 / Vu+ en Jellyfin? Sí: Headend añade el receptor como fuente de TV, con sus canales, guía y logos, y hace pasar el stream a través del servidor de Jellyfin. Consulta la guía.
Qué envía y adónde
Todas las conexiones de abajo se inician solo con una licencia válida.
- Tu receptor Enigma2 / Vu+ (OpenWebif, tu dirección; puerto web 80, stream 8001; autenticación opcional): información, estado de encendido, bouquets, canales, guía (cada 60 min) y streams de canales. Los clientes nunca ven la dirección del receptor: los streams pasan por el servidor.
- SSH al receptor (el vigilante; desactivado en instalaciones nuevas desde la versión 1.0.5 hasta que el administrador lo activa; en las actualizaciones se mantiene como estaba): comprobación TCP/HTTP cada 3 min; tras 2 fallos, la orden de reinicio mediante
ssh(usuario root por defecto, clave opcional) y después el reinicio; diagnósticos recopilados por SSH antes de reiniciar; standby tras 10 min de inactividad; búsqueda de canales nocturna (02–06). La clave de host SSH se verifica desde la versión 1.0.5 (confiar en el primer uso): se guarda en la primera conexión (ssh/known_hostsen la carpeta de datos) y, si cambia, la orden no se envía y se muestra un mensaje claro; la huella guardada se puede ver y olvidar desde la página. - Canales de internet (iptv-org) — desactivados en instalaciones nuevas desde la versión 1.0.5 (la lista de primeros pasos explica qué contactan; en las actualizaciones se mantienen como estaban), una vez activa la licencia (países por defecto RO, MD): descarga el catálogo público
iptv-org.github.io/api/*.json(como máximo cada hora, con ETag), comprueba los streams en los hosts de terceros de los canales (hasta 64 KB, cada 24 h / 6 h) y descarga los logos de canal. Esos hosts ven la dirección IP de tu servidor. Se pueden desactivar en los ajustes. Tus propias listas M3U (URL o archivo) son opcionales. - Guía externa (EPG) — desactivada en instalaciones nuevas desde la versión 1.0.5 (casilla en la lista de primeros pasos; en las actualizaciones se mantiene como estaba), cada día a las 04:00, con 2 s entre solicitudes:
www.programetv.ro,www.cinemagia.ro,epgshare01.online,open-epg.com(+ tu propio XMLTV, desactivado por defecto). Solo se solicitan páginas o archivos de programación; no se envían datos de usuarios. Las imágenes de programación se pasan al servidor como URL externas (el servidor puede descargarlas). - Logos desde un enlace: solo por acción del administrador (máx. 10 MB). El plugin no descarga paquetes de picons.
- Local:
nvidia-smipara el monitoreo de la GPU. - Las páginas no cargan recursos externos.
- Además, el cliente de licencias, igual en todos los plugins: consulta Licencias y privacidad en nuestros plugins.
Guardado localmente:
- Datos del receptor (dirección, puertos, usuario de OpenWebif) en la configuración del servidor; desde la versión 1.0.5, la contraseña de OpenWebif se cifra en reposo en
secrets.enc.jsonen la carpeta de datos del plugin (AES-256-GCM, clave aleatoria desecrets.keyvinculada al id del servidor, ambos archivos con modo 600) y nunca se envía al navegador (la página solo muestra «set ✓»); las versiones anteriores la guardan en texto plano (en la configuración del plugin). Para SSH solo se guardan la ruta de la clave y la clave de host pública del receptor (ssh/known_hosts). - PIN de canales para adultos: solo hash PBKDF2-SHA256 (200,000 iteraciones, con sal). Desde la versión 1.0.6, los PIN nuevos tienen al menos 6 dígitos (un PIN existente sigue funcionando) y los intentos erróneos se limitan con bloqueos crecientes que sobreviven a un reinicio.
history.json: los arranques de canal de las últimas 24 h y el uso por minuto (sin nombres de usuario); la guía (historial de 24 h), el catálogo de iptv-org y el búfer en directo en la caché del servidor.- La exportación «Backup» del administrador contiene la configuración del plugin; desde la versión 1.0.6 ya no contiene el hash del PIN (las versiones anteriores sí). Las direcciones de listas IPTV, guías y logos no pueden alcanzar la red local ni el propio servidor (salvo el receptor configurado), a menos que el administrador active «Local network IPTV sources» (se activa automáticamente al actualizar si las fuentes guardadas ya están en la red local); las direcciones IPTV se registran sin cuenta ni contraseña.
Compatibilidad con clientes
- Canales, guía, streams, bloqueo de canales para adultos y preferencias de audio y subtítulos se sirven a través de la TV en directo del servidor: 🟢 debería funcionar en cualquier app con TV en directo.
- ✅ Jellyfin Web: reproducción real (HD 4.4–4.7 s, SD convertido 5.2 s), de extremo a extremo 17/17, adultos 11/11.
- Apps de Jellyfin (Android/Android TV, Swiftfin, Findroid, Kodi/JellyCon, Infuse, Streamyfin) y navegadores de TV: ❔ no probadas.
- Solo navegador: la página de administración, la página «TV» (estilo Netflix) y la página «Adult channels». En las apps, el PIN se desbloquea desde un navegador en
/Headend/Unlock(por cuenta; ✅ Chrome, móvil). - Jellyfin oficial: el enlace a la página «TV» se añade a mano en
config.json(menuLinks); en medialab Server aparece automáticamente.
Leyenda: ✅ verificado (prueba de extremo a extremo o en el dispositivo) · 🟢 en el servidor, funciona con cualquier cliente (por diseño, sin prueba específica para cada cliente) · ➖ no aplicable · ❔ no probado.
Licencia
El plugin es de código abierto (GPL-3.0). Las compilaciones listas para instalar son públicas, igual que el código fuente. Lo que compras es la suscripción: la licencia para usar el plugin en un servidor de Jellyfin, las actualizaciones que incluye tu plan y el soporte: cada actualización mientras la suscripción esté activa, a través de tu repositorio privado de plugins, y ayuda cuando algo no funcione. El plugin comprueba la clave de suscripción una vez al día; sin una suscripción válida se detiene hasta que renueves (no se borra nada). Mensual, anual o de por vida (la de por vida incluye un año de actualizaciones), o incluido en el paquete para Jellyfin. 30 días de prueba gratis.
Código fuente. Para cada versión, el código fuente correspondiente completo es público, junto a la compilación, en el registro de cambios, y también en tu cuenta (Cuenta → Licencias, Código fuente); cada archivo comprimido contiene el texto completo de la GPL-3.0 (LICENSE). Si necesitas el código fuente de una versión que ya no puedes descargar, pídenoslo y te lo enviamos. Consulta la sección 10 del EULA.