Headend — TV en directo en Jellyfin desde Enigma2

Un receptor Enigma2 (Vu+) como fuente de TV para Jellyfin: canales, guía y logos del mismo aparato, retransmitidos a través del servidor para que la fuente quede oculta.

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_hosts en 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-smi para 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.json en la carpeta de datos del plugin (AES-256-GCM, clave aleatoria de secrets.key vinculada 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.

Funciona mejor con medialab Server

Este plugin funciona en Jellyfin oficial 12.2 o posterior. En medialab Server, nuestro servidor basado en Jellyfin con los mismos datos, bibliotecas, usuarios y apps, funciona mejor:

  • Verified – medialab. El servidor comprueba la firma de nuestros plugins y te muestra que los archivos son exactamente los que publicamos. Si un plugin se modifica después de publicarse, se marca.
  • Integrado en la interfaz. Los plugins pueden añadir botones y enlaces al menú de tus usuarios (por ejemplo, "TV", "Share") sin configurar nada a mano en la web.
  • Prioridad de forma predeterminada. Los plugins de medialab aparecen primero donde importa: sintonizadores de TV en directo, fuentes de guía y proveedores de subtítulos. El orden lo decides tú: puedes cambiarlo en cualquier momento.
  • El catálogo de medialab.works incluido, con instalación sin confirmaciones adicionales.
  • Actualizaciones desde la interfaz web, sin terminal (con Self-Update de MediaLab): comprueba, actualiza y vuelve a la versión anterior desde el panel de control; si una versión nueva no arranca, el servidor vuelve por sí solo a la anterior con tus datos intactos.
  • El mismo Jellyfin, al día. medialab Server sigue cada semana las versiones estables de Jellyfin 12.x; una versión nueva solo se publica después de superar todas las pruebas, incluidas las de nuestros plugins.

Headend: La TV en directo empieza más rápido (análisis del flujo más corto, primeros segmentos HLS más cortos) y la página "TV" aparece en el menú de tus usuarios; los sintonizadores Headend aparecen los primeros en "Add tuner device".

Las apps de Jellyfin (Android, iOS, TV, web) se conectan exactamente igual que a Jellyfin oficial.

Para instalarlo, ejecuta la imagen del contenedor (guía) o, en Debian 12, los paquetes apt, que sustituyen a jellyfin-server y jellyfin-web y conservan tus datos donde están (guía).

medialab Server es software libre (GPL-2.0), basado en Jellyfin. El código fuente es público: medialab-server y medialab-server-web.

Requisitos

  • Jellyfin Server 12.2 o posterior (Linux, Windows o Docker)
  • Un receptor Enigma2 con OpenWebif en la misma red
  • Código abierto (GPL-3.0): el código fuente de cada versión está en tu cuenta

Última versión

1.0.8
publicada el 20 oct 2026
Ver todos los cambios →

La compilación es pública; para usar el plugin necesitas una licencia o la prueba gratuita de 30 días.