Jellyfin con transcodificación por hardware bajo Docker

Jellyfin con transcodificación por hardware bajo Docker

Carpe Diem
Grandioso.

Tutorial actualizado 26/7/20.

Este tutorial trata de explicar como instalar y hacer funcionar como centro multimedia Jellyfin en vuestro NAS (o cualquier dispositivo), y habilitar la capacidad de transcodificación por hardware.

La mayoría de vosotros ya conoceréis Plex, o en menor medida, Emby. Plex es el software servidor multimedia más conocido en la actualidad, y funciona terriblemente bien, pero es un software de código cerrado, y tiene funciones de pago, como la transcodificación acelerada por hardware, lo cual mosquea un poco a muchas personas defensoras de código abierto (entre los que me encuentro). La alternativa que os presento es Jellyfin, un fork de Emby nacido a raíz de que sus desarrolladores decidieran hace ya más de un año cerrar su código y empezar a cobrar también por la transcodificación por hardware (hasta entonces había sido también código abierto). Actualmente lleva todavía poco tiempo de desarrollo, pero funciona perfectamente y en ocasiones con mejor rendimiento que otras soluciones.

Si buscas un servidor multimedia que sea software de código abierto, 100% funcional, y totalmente gratuito, bienvenido a la familia Jellyfin.

Puedes ver una demo de la interfaz de Jellyfin en este enlace


Ventajas de Jellyfin

Totalmente gratuito

Mismas funciones que otros servidores multimedia, y sin funciones de pago ni suscripciones: Sincronización, descarga de archivos, subtitulado, transcodificación...

Permite múltiples usuarios y control de acceso de los mismos, así como control parenteral

Compatible con Chromecast, Roku y Firestick

En constante desarrollo, pero totalmente estable en la actualidad

Compatible con Kodi a través de un plugin (Jellyfin for Kodi), lo cual, unido a las skins de Kodi, permite interfaces maravillosas

Es software de código abierto, lo cual es esencial para muchos usuarios

A diferencia de otros programas similares (no miro a nadie, Plex ¬_¬) no "llama a casa", no requiere conexión a internet con sus servidores, y no te espía (recopilación de telemetría)


Desventajas de Jellyfin

Como no podía ser de otra forma, también tiene sus desventajas, siendo la principal que está en desarrollo. No es tan estable como Plex, y le faltan funciones, ya que el 100% del trabajo se está dedicando a arreglar el código de Emby, que era un auténtico desastre.

Bugs. Sí, lo hay, y los habrá. Raramente limitan su uso, pero al estar en proceso de corrección del código, a veces aparecen bugs, que habitualmente se corrigen más o menos rápido, pero aparecen. Evidentemente Plex y Emby también tienen bugs (de esto no se salva nadie...)

Los clientes de Android e IOS funcionan, pero no están muy depurados. Personalmente, la mejor experiencia opino que se alcanza usando Kodi como reproductor.

No tiene clientes para TVs, excepto para Android TV. Esto es un punto muy limitante para mucha gente que no tiene reproductor conectado a la Tv y su televisor no tiene Android. En mi caso, yo tengo una Raspberry Pi que hace de reproductor.

No tiene paquetes de instalación para los principales NAS (Asustor, Synology, Qnap), por lo que necesita del uso de docker. Sí se puede instalar (y funciona muy bien) en una Pi4B. También dispone de instalador para Windows y algunas distros de Linux, como Ubuntu.

Configurar el acceso desde el exterior es algo más complicado, ya que no tiene servidores centrales. Eso obliga o bien a auto-gestionar certificados SSL, acceder a través de un VPN, o de un proxy inverso. Si para ti es esencial acceder desde fuera de tu red, no quieres usar un VPN y no quieres complicarte con un proxy inverso, entonces igual Plex se adapta mejor a tus necesidades. Alguna ventaja tenía que tener usar servidores centralizados.


DISCLAIMER: Aunque todo lo que se explica aquí es bastante seguro, ya que se realiza todo dentro de un contenedor de Docker (y por tanto, aislado del entorno operativo de vuestro NAS), no me hago responsable de cualquier fallo, pérdida de información, o explosión nuclear que se derive de estas instrucciones. No debería haber mayor problema, pero el que avisa no es traidor.


Tabla de contenidos

1) Instalación de Jellyfin usando Docker

1.1) Instalación usando CLI

1.2) Instalación usando GUI en QNAP y Synology

2) Configuración inicial tras la instalación

3) Comprobación de la transcodificación

4) Consejos y primeros pasos en Jellyfin

5) Usar Kodi como cliente y sincronizarlo con Jellyfin

6) Como acceder a Jellyfin desde fuera de nuestra LAN de forma segura


INSTALACION DE JELLYFIN USANDO DOCKER

Para instalar Jellyfin tenemos que crear un contenedor de docker, en el cual además vamos a montar carpetas para que Jellyfin pueda leer los archivos multimedia que tenemos, y también montaremos la GPU en el contenedor, para que Jellyfin pueda acceder a ella y hacer transcodificación por hardware. Voy a describir dos métodos de crear el contenedor: Usando comandos a través de SSH (CLI) y usando la interfaz del NAS (en mi caso QNAP, pero para Synology es básicamente igual), que es el método con GUI. Si tienes unos conocimientos mínimos de SSH, yo recomiendo encarecidamente usar CLI. Es más cómodo, rápido y funciona en cualquier dispositivo.

Asumiremos que los videos están guardados en la carpeta "Multimedia" dentro del NAS. Yo recomiendo una carpeta dentro llamada "peliculas" y otra llamada "series", donde guardaremos las respectivas (ya hablaremos de eso).

Usando CLI

Simplemente hay que hacer SSH en el NAS y usar el siguiente comando:

docker run -d \
  --name=jellyfin \
  -e PUID=0 \
  -e PGID=0 \
  -e TZ=Europe/Spain \
  -p 8096:8096 \
  -p 8920:8920 \
  -v /share/Container/jellyfin/config:/config \
  -v /share/Multimedia:/media:ro \
  --device /dev/dri:/dev/dri \
  --restart always \
  linuxserver/jellyfin

Simplemente debes cambiar la ruta de directorios según donde quieras que se monten el directorio /config. En QNAP la estructura es "/share/loquesea", así que "-v /share/Container/jellyfin/config:/config" creará un directorio "Container/jellyfin/config". En Synology la estructura es "/volume1/loquesea" así que podrías usar "-v /volume1/Container/jellyfin/config:/config".

El directorio /config es donde se guardan todos los archivos de configuración y todos los metadatos. Al montar esta carpeta en el NAS, te aseguras que si destruyes el contenedor y luego vuelves a crearlo usando la misma ruta, absolutamente todas las configuraciones, metadatos, etc permanecerán.

Si todo ha ido bien, deberías ver en la interfaz de Docker de tu NAS el contenedor corriendo. Ahora ya podemos empezar a usarlo, así que salta directamente a la parte del tutorial de configuración.

VOLVER AL ÍNDICE


Usando GUI

En QNAP (Container Station)

Abrimos Container Station y seleccionamos el botón de Create (1), después en la barra de búsqueda (2) ponemos "Jellyfin" y seleccionamos la búsqueda en "Docker Hub" (3). Veremos que hay múltiples contenedores disponibles, nosotros vamos a seleccionar "linuxserver/jellyfin" (4). Pulsad "Install", y cuando os pregunte qué versión descargar, seleccionad "latest".

Create o Install, es indiferente. Seleccionad "linuxserver/jellyfin", no "jellyfin/jellyfin"


A continuación en la pantalla de creación de container, seleccionad el nombre que queráis (ej: jellyfin), mantened activado auto-start, y pulsad sobre "advanced settings"


En primer lugar, pulsad en la pestaña de "Environmental" (1) y luego seleccionad "Add" (2) para añadir dos nuevas líneas (el recuadro rojo), que deben contener "PUID" y "PGID" como nombre, y como valor "0" en ambas. Esto hará que el contenedor sea ejecutado como admin, y por lo tanto nos evitará conflictos de permisos con los directorios y con /dev/dri.

PUID es usuario, PGID es grupo. PUID y PGID = 0 equivale a ejecutar el container como usuario administrador y grupo administrador (en QNAP = admin:administradores)

Disclaimer: Ejecutar el contenedor como usuario root no es una práctica segura, pero desgraciadamente es probable que si no hacéis así, no podáis transcodificar por hardware, ya que /dev/dri suele tener permisos 700 (solo accesible por root). Alternativamente, haciendo bash en el contenedor y ejecutando "chmod -R 777 /dev/dri" permitirá que funcione sin necesidad de ejecutar el contenedor como root, pero al reiniciar el NAS los permisos volverán a restaurarse a 700. Si no quieres ejecutar el contenedor como root por seguridad, puedes hacer un script que cambie los permisos cada vez que se ejecuta el contenedor. Aquí están las instrucciones: https://blog.linuxserver.io/2019/09/14/customizing-our-containers/

Después id a la pestaña "Network"(1), aseguraos que el modo seleccionado es NAT (2) y pulsad el botón "Add" (3) para añadir dos puertos al port forwarding: 8096 y 8920, tal y como se ve en la imagen.

Si queréis usar otros puertos, podéis cambiar los de las casillas "host". Los de las casillas "Container" tienen que ser forzosamente 8096 y 8920. El puerto 8096 es HTTP, y el 8920 es HTTPS.


Posteriormente pulsáis en "Device" (1) y marcáis "Run containers in privileged mode" (2), y pulsando sobre "Add" añadís dos dispositivos: "Direct Rendering Infrastructure" y "video4linux" (3)


Finalmente seleccionad "Shared Folders" (1) y en "volume from host" pulsado sobre "Add" (2) y aquí es donde montaremos las carpetas entre el NAS y el contenedor. Los directorios del container tienen que ser forzosamente "/media" y "/config", como se ve en la imagen (en azul). Los directorios en el NAS puede ser los que vosotros queráis. En este caso, todos los videos están en "/Multimedia", y las configuraciones se guardarán en "/Container/jellyfin/config" pero podéis cambiar estos directorios según necesitéis. Yo personalmente recomiendo montar la carpeta "media" como solo lectura (desmarcar la opción write) para evitar que Jellyfin pueda borrar los archivos de video, no sea que por error humano o por un bug, se borre todo. La carpeta "config" tiene que tener forzosamente permisos de lectura y de escritura. Cuando esté todo listo, pulsad sobre "Create".

Si os aparece algún directorio en la parte de arriba (donde dice "New volume"), ignoradlo, todo está bien.


Ya está listo. Tras unos instantes, os aparecerá el contenedor en "Containers" (1), y si todo es correcto, os aparecerá un icono de una cadena junto al nombre del contenedor (2), y al pulsar sobre ella, se os abrirá el interfaz web para empezar a configurarlo. Alternativamente, podéis acceder a él poniendo en vuestro navegador la dirección IP del NAS seguida de dos puntos y el puerto 8096 (o el que hayáis configurado en los pasos anteriores). Ej: 192.168.1.100:8096

VOLVER AL ÍNDICE


En Synology (Docker)

El procedimiento es parecido, pero al parecer, la interfaz de Synology no permite montar la GPU como sí que permite QNAP, por lo que hay que hacer un truco para que funcione: Crear el contenedor igual, luego exportar el contenedor como .json y modificar el parámetro que permite al contenedor acceder a la GPU, y finalmente, importarlo de nuevo con el .json ya modificado.

Yo no dispongo de Synology para hacer capturas de pantalla, pero el proceso está detallado en el siguiente enlace: https://bitnarios.com/como-instalar-jellyfin-en-tu-nas-synology-y-activar-correctamente-la-aceleracion-por-hardware/

VOLVER AL ÍNDICE


CONFIGURACION INICIAL

Para evitar líos al crear las bibliotecas, yo os recomiendo personalmente la siguiente organización de directorios para vuestros archivos multimedia:

  • La carpeta principal es "Multimedia", así que dentro haremos una carpeta para cada tipo de archivo:
  • Una llamada "Peliculas" (o "movies", lo que queráis) donde metéis todas películas.
  • Una llamada "Series" donde creáis una carpeta por cada serie. Dentro de cada carpeta de serie una carpeta para cada temporada, llamada "Season 01", "Season 02", etc (o también "temporada 01", "temporada 02", etc). Dentro de cada carpeta, los videos de esa temporada, que deben incluir en el nombre (S01E01, S01E02, etc, o bien 1x01, 1x02, etc).
  • Si tenéis Anime, también podéis crear una carpeta "Anime", o en su defecto, podéis meter el Anime dentro de la carpeta de Series, dependiendo de que queréis que aparezcan en la misma biblioteca o separadas.
 Ejemplo:

Multimedia
|
|-> Peliculas
|      |-> El sentido de la vida (1983).mkv
|      |-> El quinto elemento [Remastered](1997).mkv
|      |-> El rey leon (2019).mkv
|
|-> Series
       |-> Firefly
       |      |-> Season 01
       |            |-> Firefly S01E01.mkv
       |            |-> Firefly S01E02.mkv
       |            |-> etc
       |-> Stranger Things
              |-> Season 01
              |     |-> Stranger Things S01E01.mkv etc etc
              |-> Season 02
                    |-> Stranger Things S02E01.mkv etc etc


Pantalla del wizard de configuración


Al entrar por primera vez, nos aparecerá el menú de inicio de configuración. Seleccionad el idioma y pulsad Next. Os pedirá que creéis un usuario y una contraseña, y posteriormente se os presentará el menú de creación de bibliotecas. Para crear la primera, pulsad sobre "add media library".

Creación de la primera biblioteca. Recomiendo tener una biblioteca para Películas, otra para Series, y una tercera para Anime (si lo consumís)


En Content Type seleccionaremos el tipo de archivo ("Movie" para películas, "TV Shows" para series y tb para anime). En "Display name" pondremos como queremos que se llame esa biblioteca, en mi caso como es de películas, pues pongo eso, pero podeis poner el nombre que queráis. En Folders seleccionamos el directorio donde tengamos las películas. Dado que hemos montado la carpeta en /media, es ahí donde tendremos que ir a buscar.

Para más información sobre cómo debéis renombrar las películas para que Jellyfin las identifique a la primera, pulsad donde la flecha roja, y se abrirá una ventana con información adicional
Si queréis que los metadatos se recopilen en español, Seleccionad Spanish;Castillian en el lenguaje, y Spain en la casilla del país


El resto de opciones dejadlas como están, o si queréis, trastocad con ellas. Cuando esté, pulsad sobre Ok, y se creará la biblioteca. Repetid el proceso para el resto de multimedia de vuestra biblioteca. Y cuando todo esté a vuestro gusto, pulsad sobre "Next".


La siguiente ventana os da la opción de elegir el lenguaje por defecto de los metadatos que se descargarán, aunque cada biblioteca puede tener su propio idioma. Seleccionad el que prefiráis y pulsad Next.


La última ventana nos pregunta dos opciones. La primera hay que dejarla activada, ya que este servidor nos da acceso remoto (de momento dentro de nuestra LAN, pero sigue siendo remoto). Si desmarcáis la primera opción, os quedaréis bloqueados sin poder acceder al servidor.

La segunda opción es activar o no el UPnP para que abra los puertos automáticamente a nivel de router. Yo, por temas de seguridad, prefiero desactivarlo, pero aquí ya es un tema de cada uno. SI NO SABES LO QUE ES UPnP, DESACTIVA ESTA OPCIÓN. Pulsad Next, y luego FINISH.

Os recibirá la pantalla de login de Jellyfin. Introducid vuestro usuario y password que elegisteis al principio del menú de configuración e iniciad sesión.

Ahora veréis la pantalla del panel de control. Como podréis ver, Jellyfin ya se ha puesto a trabajar para descargar todos los metadatos de los archivos de nuestra biblioteca. AVISO: Puede tardar MUCHO en descargar todos los metadatos, especialmente en sistemas un poco más lentos.

Ahora vamos a activar la transcodificación por hardware. Pulsad sobre "Reproducción" (Flecha roja)


Una vez allí Seleccionamos VAAPI (1), el dispositivo es "/dev"dri/renderD128" (2) y activamos la transcodificación por hardware (3). Aseguraos de pulsar el botón grande y azul de abajo del todo donde dice "GUARDAR".

Listo. A partir de ahora debería estar habilitada la transcodificación por hardware, siempre que tu dispositivo la soporte, por supuesto (todos las CPU intel x86_64 modernas lo permiten). Si al tratar de transcodificar te da un error, pero desactivando la aceleración por hardware sí que te funciona, es probable que tu CPU no tenga capacidad de transcodificación por hardware.

Para acceder y navegar por vuestra biblioteca, pulsad en el icono de la casa en la parte superior izquierda de la pantalla.

Este es un ejemplo de como queda una biblioteca, una vez escaneado todo y con algunos ajustes extra.

No esperéis que Jellyfin va a reconocer el 100% de vuestros archivos a la primera. Si habéis dedicado un poco de tiempo a renombrar los archivos para adecuarlos a los formatos que vienen en su web, os reconocerá la mayoría de ellos, pero seguramente no todos. Ahora podéis moveros manualmente por vuestra biblioteca y modificar aquello que queráis, incluyendo metadatos, identificar películas, añadir o cambiar imágenes de carátulas, fondos, etc etc etc.

Jellyfin descarga los metadatos desde distintos proveedores de internet (que por cierto son configurables en las opciones de biblioteca), y la mayoría de ellos tienen bases de datos enormes para inglés, pero mucho más reducidas para Español. Es frecuente que si descargáis los datos en Español, acabéis con menos identificadas o con pocas carátulas (esto pasa muchísimo sobre todo con el Anime). No es culpa de Jellyfin, es culpa de los proveedores, y lo único que puedes hacer es probar con otro proveedor (googlea como cambiar de proveedor de metadatos con Jellyfin), añadir manualmente lo que quieras, o poner el idioma de los metadatos en Inglés, para acceder a las bases de datos más potentes pero a costa de que el contenido que aparezca sea en inglés. Yo Series y Anime los tengo en Inglés porque la verdad es que en Español me faltaban muchísimos metadatos. Películas las reconoce perfectamente incluso con metadatos en Español. Haced pruebas.

VOLVER AL ÍNDICE


COMPROBAR SI FUNCIONA LA TRANSCODIFICACION

Por defecto, Jellyfin va a intentar siempre que pueda utilizar el sistema "Direct Stream", es decir, enviar el archivo de video "tal cual" está almacenado, para que sea el dispositivo cliente el que lo reproduzca. Por lo tanto, depende del cliente si se requiere transcodificación o no. Si solicitamos un cambio de resolución del video, por ejemplo, el sistema se verá obligado a transcodificar para reducir el tamaño del archivo. Todo eso se puede monitorizar desde la pantalla principal del panel de control.

Aquí estoy reproduciendo un capítulo de The Mandalorian desde el navegador web de mi ordenador (un i7). Dado que mi ordenador es sobradamente capaz de reproducir el archivo por sí mismo, Jellyfin inicia un Direct Stream, y no consume recursos de CPU ni GPU (el trabajo lo hace mi ordenador en este caso)

Streaming Directo = No transcodificación. Es la situación ideal.

Pero aquí estoy reproduciendo exactamente el mismo archivo, esta vez desde el cliente de Jellyfin en mi móvil. Dado que mi móvil es una patata de 200€, no es capaz de reproducir el video por sí mismo, ya bien sea por el códec, por los subtítulos, por el formato del sonido... en cualquier caso, Jellyfin detecta esto, e inicia automáticamente la transcodificación.

84fps (mi NAS no tiene GPU, así que en mi caso, la transcodificación se hace por software)

La transcodificación puede ser por software o por hardware. Dado que hemos activado antes la transcodificación por hardware, en vuestro caso usará la GPU para ello, y no deberíais notar una elevación excesiva de la CPU. Si preferís hacer la transcodificación por software, simplemente desactivad la aceleración por hardware, y todo se hará por software. Esperad ver la CPU con un % de uso muy elevado durante este proceso (cerca del 100%).

VOLVER AL ÍNDICE


PRIMEROS PASOS EN JELLYFIN

La configuración y uso de Jellyfin queda fuera del objetivo de este tutorial, así que deberéis indagar por vuestra cuenta (aunque la verdad es que no tiene ninguna dificultad). Pese a todo, os quiero dejar algunos consejos:

  • Mi NAS no dispone de GPU, así que todo lo que he puesto sobre transcodificación por hardware se basa en la ayuda de otros compañeros de la comunidad que sí disponen de máquinas capaces de hacerlo y me han ido dando indicaciones. Por ello, me temo que YO NO PUEDO DAR SOPORTE SOBRE LA TRANSCODIFICACIÓN POR HARDWARE. Si no os funciona correctamente, tendréis que pedir ayuda a algún otro compañero, no a mí.
  • Leed la documentación (https://jellyfin.org/docs/general/quick-start.html), y si necesitáis ayuda, la comunidad de reddit de jellyfin (r/jellyfin), que es donde nació el proyecto, es muy amable y sin duda os echarán una mano.
  • Podéis reproducir los videos desde el navegador, pero también desde las aplicaciones de Jellyfin oficiales (Android, IOS, Firestick etc) y desde Kodi usando un plugin.
  • Vale la pena perder un rato renombrando los archivos correctamente para que coja automáticamente los metadatos. Se puede identificar manualmente, pero resulta largo, tedioso, y si tienes que rehacer la biblioteca, tendrás que volver a hacerlo todo manual de nuevo. Poner el año de publicación de la película o serie entre paréntesis ayuda mucho con la identificación.
  • Podéis crear múltiples usuarios, cada uno con acceso a ciertas bibliotecas, y de este modo, hacer una cuenta para compartir con la familia que no pueda hacer transcodificación, o una cuenta para los peques de la casa que únicamente les dé acceso a los dibujos animados y no a otras bibliotecas.
  • Podéis modificar las imágenes de los metadatos por otras disponibles en las bases de datos que os gusten más, o incluso subir vuestras propias imágenes.
  • Existen unos pocos plugins disponibles en Jellyfin. Uno interesante se llama "TMDB Box Sets", que identificará las películas que formen parte de una colección (las 3 de Matrix, las películas de Harry Potter, etc) y las unirá en una "colección" para tenerlas todas juntas. Muy recomendable.
  • En la pestaña "registros" del panel de control tenéis todos los logs. Mirad allí para buscar información si algo no funciona.
  • Respecto a los metadatos de Anime, es un poco... Meh. No es culpa de Jellyfin, si no de los proveedores de metadatos (como tvdb) que tienen a menudo información errónea. No hay mucho que se pueda hacer. Tener la biblioteca de Anime bien organizada y con todo a nuestro gusto es muy difícil, por no decir imposible. Siempre puedes corregir cosas manualmente, claro, pero aun así...
  • Puedes modificar el aspecto de los menús de Jellyfin modificando el CSS. Viene información en la documentación oficial, aunque necesitarás unos conocimientos de CSS para saber lo que estás haciendo.
  • Al correr en un contenedor, es difícil conseguir que funcione el DLNA (ya que funciona en una subred virtual). Sé que se puede, pero yo no lo uso, no lo he probado, y no tengo ni idea al respecto, lo siento mucho. Buscad información en reddit.
  • Para actualizar la versión de Jellyfin, los pasos son los siguientes: Primero destruir el contenedor (si no tocáis la carpeta montada de /config, toda la configuración y los metadatos se conservarán al recrear el contenedor). Después borrad la imagen descargada de linuxserver/jellyfin (En QNAP está en la pestaña "imágenes" dentro de Container Station). Finalmente, volved a crear el contenedor usando los mismos comandos que al crearlo (al no encontrar la imagen descargada de linuxserver/jellyfin, se bajará la última versión disponible).

VOLVER AL ÍNDICE


KODI COMO REPRODUCTOR CON JELLYFIN

Mi opción favorita para disfrutar de Jellyfin es hacerlo a través de Kodi. Kodi es un reproductor cliente, de código abierto, pensando para centros multimedia. Es totalmente modificable, y admite todos los códecs del mundo mundial. En principio está pensado para bibliotecas locales, pero gracias a un plugin (Jellyfin for Kodi), puede sincronizar las bibliotecas de Jellyfin.

Jellyfin dispone de una única interfaz para movernos por sus menús, pero Kodi tiene decenas de interfaces distintas, y eso nos permite modificar la interfaz mientras mantenemos todas las ventajas de Jellyfin, como la sincronización de las bibliotecas.

Esta es la interfaz normal de Jellyfin:

Funcional, bastante similar a la de Plex o Emby
Detalles dentro de la película


Y esta la interfaz de Kodi con la skin ACE2:

Menú principal
Detalle de la película incluido en el menú general de selección de películas, con disco animado
Me encanta la animación de los discos girando <3


¿Demasiado recargado y preferís algo más minimalista? Qué tal la Arctic Zephyr 2:

Minimalista y nada recargada
Esta es la visión en tres paneles, pero esta skin dispone de más de 10 interfaces distintas
Visión de menú alternativa en formato poster

En este tutorial solo voy a explicar lo básico: Instalar Kodi y el plugin "Jellyfin for Kodi" con la interfaz básica, y sincronizar ambos. El resto es cosa vuestra ;-)

Lo primero instalaremos en Jellyfin el plugin "Kodi Sync Queue" que agiliza mucho la sincronización entre Kodi y Jellyfin. No es necesario, pero sí conveniente. Abrid vuestro servidor Jellyfin que ta tenéis funcionando, e id al panel de control, y dentro de "Complementos" (1) seleccionad la pestaña de "Catálogo" (2) y allí "Kodi Sync Queue) (3). Instaladlo, y una vez hecho, REINICIAD EL SERVIDOR APAGANDO EL CONTAINER Y VOLVIENDO A ENCENDERLO.


Asumiendo que ya tenéis Kodi instalado en vuestro cliente (Tablet, Windows, Linux...), ahora tenemos que descargarnos el repositorio para instalar Jellyfin for Kodi. En primer lugar acudid a las instrucciones oficiales de instalación: https://jellyfin.org/docs/general/clients/kodi. Descargad el repositorio en formato .zip

Pulsad en la flecha roja para descargaros el repositorio en formato .zip. IMPORTANTE: NO LO DESCOMPRIMÁIS. Dejadlo tal cual


Una vez descargado iniciad Kodi y abrid la ventana de configuración (el icono de la rueda dentada asumiendo que estáis usando la skin por defecto) (1), os vais a System Setup (2), y allí en la pestaña de "Add-ons" (3) activáis "Unknown sources" (4) y aceptáis el cuadro de diálogo.

Esto permite instalar add-ons de fuera del repositorio oficial de Kodi


Volvemos al menú principal, y seleccionamos la pestaña de "Add-ons" (1), y en el pantalla siguiente, el icono de una caja de cartón que hay en la esquina superior izquierda (2), y dentro, "Install from zip file" (3)


Se nos abrirá un diálogo para movernos por el árbol de directorios de nuestro dispositivo, y nos dirigimos al directorio donde habíamos guardado el archivo .zip, y lo seleccionamos. Nos aparecerá un mensaje indicando que se ha instalado el repositorio "Kodi Jellyfin Addons"


Casi lo tenemos. Desde el menú donde elegimos antes "Install from zip file", seleccionamos esta vez "Install from repository" (3), y dentro vamos seleccionando "Kodi Jellyfin Addons" (4) --> "Video Add-ons" (5) --> "Jellyfin" (6). Entonces seleccionad "Install" e instalar la última versión (en el momento de escribir este tutorial es la 0.5.8)


Comenzará a descargarse automáticamente múltiples dependencias que son necesarias, y finalmente os saldrá el logotipo de "Jellyfin Add-on installed"

Mensaje de instalación correcta


Ya tenemos el plugin instalado, ahora sólo nos falta configurarlo. Reiniciad Kodi, y al arrancarlo de nuevo, os aparecerá automáticamente la ventana de configuración de Jellyfin For Kodi. Puede ser que os aparezca automáticamente el servidor en la ventana en caso de que sea capaz de autodetectarlo, pero en caso de que no sea así, seleccionad "Manually add server"


Y entonces ponéis la dirección IP de vuestro NAS seguida de dos puntos y el puerto (el puerto por defecto es 8096), y pulsad "Connect"


Si lo habéis hecho bien, os aparecerá entonces el nombre del servidor (por defecto tiene como nombre el ID del container, pero esto lo podéis cambiar en las opciones de configuración de Jellyfin). Seleccionad dicho servidor


Os identificáis con las credenciales de usuario que hayáis creado previamente. En mi caso es la cuenta inicial que creé al iniciar Jellyfin por primera vez.


En la siguiente pantalla seleccionad "Add-on (default)"


Después os preguntará qué bibliotecas queréis sincronizar. En mi caso, secciono Todas (All) (1), pero vosotros podéis decidir que sólo se sincronice alguna o varias específicas. Después pulsad OK (2)


Y ya está, automáticamente se descargará y sincronizará estados (Visto, no visto, metadatos, etc) de todo lo que contenga Jellyfin. Si veis algún capítulo o película, Kodi actualizará su estado automáticamente en Jellyfin, y al revés, cada vez que iniciéis Kodi, sincronizará todos los cambios que detecte a nivel del servidor.

Arriba (flecha roja) nos marca el estado de la sincronización


Listo. Terminado. Ya tenéis disponibles y sincronizadas vuestras películas y series y podéis usar Kodi como reproductor, que es uno de los reproductores más versátiles que existen. Todo en Kodi es customizable hasta unos niveles de locura, no tenéis más que googlear y aprender a sacarle todo el partido a Kodi.

En caso de que cometáis un error durante la configuración del plugin, y queráis volver a empezar el proceso desde cero, dentro de Kodi buscad el plugin de Jellyfin for Kodi y abridlo (no digo configuración, digo acceder al plugin). Allí veréis varias opciones (Manage Library, Add Server...) os desplazáis hasta "Perform local database reset" y le dais. Confirmáis y le decís que no queréis conservar la configuración de Jellyfin for Kodi. Cuando acabe, reiniciad Kodi y os volverá a aparecer los menús de configuración del plugin como si la acabarais de instalar.


Como añadido pero totalmente innecesario, si queréis cambiar la skin de Kodi, podéis hacerlo ahora, en settings (1) seleccionad "Interface Settings" (2) (no, no es skin settings aunque sería lo lógico), y dentro seleccionad "Skin" (3). Te aparecerán solamente dos, que son las descargadas: Estuary, la que viene por defecto, y Estouchy, que es la misma pero optimizada para dispositivos táctiles. Pulsad en "Get more" y te aparecerán muchas skins que hay disponibles por defecto en el repositorio oficial de Kodi.

Aeon Nox
Amber
Arctic: Zephyr (Nótese que esta skin permite clasificar la biblioteca "Anime" fuera de "Series")


Hay decenas de skins más, pero muchas de ellas no las encontraréis por defecto en el repositorio de Kodi. Algunas requieren instalar su propio repositorio, como hicimos como el repositorio de Jellyfin for Kodi. Moveos por los foros y buscad hasta encontrar una skin que se adapte a vuestras necesidades.

VOLVER AL ÍNDICE


ACCESO DESDE FUERA DE LA RED LAN

Todo está listo. Estáis disfrutando a tope con Jellyfin, y se te ocurre que quieres poder disfrutar de tus series desde la tablet cuando vayas a un hotel. También te gustaría compartir tus películas con otros miembros de tu familia que viven fuera de tu casa. Normal. ¿Esto es posible?

Sí. Es posible, pero hay que hacerlo con cabeza. No puedes simplemente abrir el puerto 8096 en tu router, porque aunque serviría para dar acceso a Jellyfin desde internet, el puerto 8096 es una conexión HTTP, no segura, y por lo tanto con riesgo de que por ejemplo, puedan robar tus credenciales. NO HAGAS ESTO.

Para conectarte de forma segura, tienes dos alternativas principalmente: VPN y Proxy Inverso

VPN/Zero-Tier

Conectarnos a un servidor VPN en nuestra red y acceder a Jellyfin como si estuviéramos en nuestra red LAN es una forma muy segura de hacerlo (Zero-Tier tiene un comportamiento bastante similar y podéis buscar información en los videos del canal de Youtube de NASeros). No voy a explicaros como montar un servidor VPN, porque hay cientos de tutoriales por la red, simplemente, una vez que esté montado y funcionando:

  • Os conectáis a vuestro servidor VPN desde fuera de vuestra red
  • Accedéis a Jellyfin como si estuvierais conectado a la wifi de vuestra casa, usando el puerto 8096 (es seguro, porque toda la conexión va encriptada por un túnel seguro por el VPN)
  • Cuando acabéis, cerrad la conexión con el VPN

Esta solución es perfecta si es para conectaros vosotros mismos (y es la que yo recomiendo), aunque puede ser algo complicada de explicar a la familia si queréis compartir las películas con los que están fuera de vuestra casa.

Proxy Inverso

El proxy inverso es el sistema más versátil y es razonablemente seguro. Consiste en abrir el puerto 443 de vuestra red y dirigirlo a un servidor que se encargará de redirigir las conexiones a cada servicio que corresponda. Con este sistema puedes acceder a muchos programas de tu red, abriendo un único puerto, y con un único certificado, a través de múltiples direcciones URL (por ejemplo: https://jellyfin.midominio.com, https://nextcloud.midominio.com, https://transmission.midominio.com... etc)

A continuación voy a detallar paso a paso como crear un proxy inverso corriendo en Docker, y que puede gestionarse a través de una interfaz de usuario (GUI) utilizando Nginx-Proxy-Manager, y como crear los certificados y redirigir las conexiones.

Los pasos a realizar y que detallaremos a continuación, son los siguientes:

  • Disponer de un dominio propio, o en caso de no disponer de uno, registrarse en un servicio DDNS gratuito y obtener un dominio allí. Asegurarse de que el dominio apunta a vuestra IP pública.
  • Instalar nginx-proxy-manager y abrir los puertos necesarios en el router
  • Crear los certificados SSL usando let's encrypt
  • Redirigir las conexiones al servidor

Muy bien. Necesitamos disponer de un dominio en un proveedor DDNS para poder obtener certificados. Yo recomiendo https://www.duckdns.org pero se puede hacer en cualquier proveedor.

En este ejemplo voy a explicarlo con Duckdns, pero podéis hacerlo con el proveedor que vosotros prefiráis. Preferiblemente si el proveedor permite sub-subdominios, porque en este ejemplo voy a utilizar sub-subdominios, ya que es más sencillo. Ejemplo: El proveedor será "duckdns.org", el subdominio que regitraremos será "naserostuto.duckdns.org", y certificaremos el sub-subdominio "jellyfin.naserostuto.duckdns.org". Así si queremos usar el proxy inverso con otros servicios, pues simplemente certificaremos "transmission.naserostuto.duckdns.org", por ejemplo.

Bien, entrad a www.duckdns.org y registrad una cuenta nueva. Podéis hacerlo con cuenta de google, persona, github... si no tenéis ninguna, simplemente cread una cuenta de reddit (reddit ni siquiera obliga a confirmar la dirección de correo) y usadla para hacer login en duckdns.

Aquí ponéis el subdominio que queráis (1) y pulsáis "Add Domain". Inmediatamente os aparecerá abajo (2) con vuestra IP pública. Si aquí la IP no coincidiera, podéis actualizarla manualmente pulsando en Update IP. Vuestra dirección de dominio será "loquesea.duckdns.org".

Podéis certificar hasta 5 subdominios distintos, y cada uno de ellos con infinitos sub-subdominios.

Desde este momento, la url "http://naserostuto.duckdns.org" (bueno, la que hayáis elegido) redirige directamente a vuestra IP pública. Ya tenemos el dominio para los certificados listo.

Recordatorio: El OS de Synology (DSM) tiene incorporado un proxy inverso, así que en vez de montarlo en un contenedor de docker, como hago yo en este tutorial, tenéis la opción de usar el que viene integrado en el propio DSM. La elección es vuestra.

Ahora crearemos el proxy inverso, usando la imagen jlesage/nginx-proxy-manager. El comando de CLI es el siguiente, para los que queráis ir rápido:

docker run -d \
    --name=nginx-proxy-manager \
    -p 38181:8181 \
    -p 38080:8080 \
    -p 34443:4443 \
    -v /share/Container/nginx-manager/config:/config:rw \
    jlesage/nginx-proxy-manager

Cambio los puertos porque algunos NAS os pueden dar problemas con el 8080 (por ejemplo QNAP). El puerto 38181 será el acceso a la GUI. El 38080 será el acceso http, y el 34443 será el acceso a https.

Para crearlo usando GUI (las imágenes son de QNAP, pero en Synology y Asustor debe ser prácticamente igual). Create (1), buscamos "nginx-proxy-manager" (2), y en Docker Hub (3) nos vamos a "jlesage/nginx-proxy-manager" y lo instalamos (4)

Al crearlo, entráis en opciones avanzadas, y en la pestaña "network" Añadís y ponéis los puertos como aparecen en la imagen. 38080-->8080, 38181-->8181, 34443-->4443

Los puertos de Host podéis elegirlos libremente. Los puertos de Container deben ser esos.

Ahora en la pestaña de Shared Folders elegís el directorio donde queráis montar /config. En la imagen se ve un ejemplo. Finalmente pulsad Create.

Ahora ya podéis acceder a la interfaz del proxy inverso. En el navegador dirigíos a la IP del NAS y el puerto 38181. Ejemplo: http://192.168.1.100:38181. Cuando os salga la pantalla de login, las credenciales son Usuario: admin@example.com y Password: changeme . Una vez hecho el login, rellenad vuestro email (para que Let's encrypt os pueda notificar si un certificado va a caducar) y cambiad el password que viene por defecto.

Ahora toca abrir los puertos a nivel del router. Tenéis que abrir el puerto 80 externo, y redirigirlo a la IP del NAS y el puerto 38080. Lo mismo para el puerto 443 externo, que tenéis que redirigir a la IP del NAS y el puerto 34443 interno. 80 --> 38080, 443 --> 34443. Cada router se configura de una forma distinta, así que buscad documentación al respecto.

Volviendo a la interfaz de Nginx Proxy Manager, pulsad sobre SSL Certificates (1) luego Add SSL Certificate (2) y seleccionad "Let's Encrypt" (3)

Vamos a certificar por subdominios. Sobre todo, recordad, para que esto funcione, necesitamos 1) Que el subdominio de duckdns.org esté apuntando a nuestra IP pública, y 2) Que el router tenga los puertos 80 y 443 redirigidos a 38080 y 34443, tal y como explicamos en el paso anterior. Si estos pasos no están correctamente hechos, el proceso de certificación fallará. En este caso, para jellyfin, usaremos jellyfin.dominio.duckdns.org. Lo introducimos en el espacio correspondiente, aceptamos los TOS de Let's Encrypt, y le damos a Save.

Si todo ha ido bien, nos aparecerá el certificado y la fecha de expiración (3 meses). Si recibís un mensaje de "internal error" entonces el proceso ha fallado, seguramente porque no habéis redireccionado correctamente los puertos. Revisadlo.

Conseguido. Certificado emitido.

Casi estamos. Sólo falta crear la regla de redirección. En la pestaña de Host (1) seleccionad "Proxy Host" (2) y entonces "Add Proxy Host" (3)

En el menú que se os abre, configuradlo como se ve en la imagen: En detalles (1) El nombre del dominio es "jellyfin.naserostuto.duckdns.org". http, y poned la IP y el puerto del servidor Jellyfin. Si queréis un poco más de seguridad, activad "Block Common Exploits". En la pestaña SSL (2) seleccionad el certificado que acabamos de crear, y activad "Force SSL". Salvad, y listo.

Ya tenéis el Proxy inverso funcionando. Si ahora accedéis desde fuera de vuestra red local a la dirección "https://jellyfin.naserostuto.duckdns.org" os aparecerá la pantalla de login de Jellyfin. Esta URL también os valdrá para la aplicación de Jellyfin o para el plugin Jellyfin for Kodi.

Aprovechando que tenéis un proxy inverso funcionando ahora, podéis añadir más servicios para acceder desde fuera de vuestro hogar. Simplemente repetid los pasos, certificando otro sub-subdominio (ej "nextcloud.dominio.duckdns.org") y creando un nuevo Proxy host con la IP y el puerto de nextcloud. Repetid tantas veces como queráis.


VOLVER AL ÍNDICE


Y con esto finaliza el mini-tutorial de Jellyfin. Espero de corazón que os sirva de ayuda y que disfrutéis de Jellyfin tanto como lo hago yo. Un saludo a todos.

Report Page