Instalar Jellyfin en un Synology NAS en Docker con Hardware Transcoding

#Synology #Docker #Jellyfin

Estuve toda la tarde luchando con esto, así que es una buena oportunidad para dejarlo por escrito.

La idea es instalar a través de Docker una versión de Jellyfin con la transcodificación acelerada por hardware activada, pero hay algunos inconvenientes que es necesario resolver.

Instalación de Docker

Esto se puede hacer de manera sencilla a través del Centro de Paquetes del propio NAS.

Docker en el Centro de Paquetes de DSM
Docker en el Centro de Paquetes de DSM

Plan A: Instalación de Jellyfin vía Docker

Acá es donde pueden aparecer diferentes opciones. Según la fuente se puede instalar de diferentes maneras.

Según la documentación oficial de Jellyfin, por ejemplo, la forma de instalación recomendada para NAS Synology es hacerlo directamente desde la interfaz visual de la aplicación Docker, siguiendo un asistente de configuración, usando la imagen de docker oficial jellyfin/jellyfin.

La instalación de Jellyfin de esta manera funciona bien, PERO… dentro de ese asistente no encontré la forma de agregar los parámetros necesarios para habilitar la transcodificación por hardware.

¿Cuáles Parámetros?

Para poder habilitar hardware transcoding dentro de Jellyfin hay que iniciar el container de docker con un parámetro adicional --device=/dev/dri:/dev/dri. De esta manera se comparte el acceso al hardware necesario para la transcodificación desde el sistema host de Docker hacia dentro del container de Jellyfin.

Para poder llegar a esto es necesario plantear otra alternativa de instalación…

Plan B: Instalación con script manual

Antes de poder ejecutar Jellyfin desde un script manual con los parámetros adicionales es necesario contar con los permisos de acceso a los dispositivos dentro de /dev/dri.

Plan B, Parte 1: Permisos

Para modificar estos permisos cada vez que se inicia el NAS se puede usar una Tarea Programada, desde “Panel de Control -> Programador de Tareas -> Crear -> Tareas Activadas -> Script Definido por el Usuario” con el usuario root y el script:

chmod 777 /dev/dri/*

Plan B, parte 2: UID y GID

Un dato necesario para la ejecución de Jellyfin es el UID y el GID de un usuario administrador. Para obtener este dato se puede habilitar el acceso por SSH, y conectarse al NAS a través de SSH con un usuario administrador.

Una vez conectado, se puede usar el comando id <nombre-de-usuario>.

Obteniendo IDs de los usuarios
Obteniendo IDs de los usuarios

Plan B, parte final: Instalación de Jellyfin vía Programador de Tareas

Ahora que conseguimos los datos necesarios, se puede armar el container de Jellyfin con todos los parámetros siguiendo con esta misma idea de usar el Programador de Tareas para ejecutar comandos.

Para esto, el script que hay que ejecutar es:

docker run -d \
 --name jellyfin \
 --user UID:GID \
 --net=host \
 -v /volume1/docker/jellyfin/config:/config \
 -v /volume1/docker/jellyfin/cache:/cache \
 --mount type=bind,source=/volume1/video,target=/media \
 --restart=unless-stopped \
 --device=/dev/dri:/dev/dri \
 jellyfin/jellyfin

Resultando algo de este estilo:

Si todo funcionó correctamente debería aparecer el container corriendo en docker.

Jellyfin funcionando dentro de Docker
Jellyfin funcionando dentro de Docker

Plan B, parte final (alternativa): Instalación vía SSH

Otra posibilidad es ejecutar este ultimo comando de creación de container directamente desde SSH.

The End

Ahora que todo lo anterior funcionó, podemos configurar Jellyfin para activar las aceleraciones por hardware para la decodificacion y codificación:

ENABLE THEM ALL!
ENABLE THEM ALL!

Y todo esto para poder transmitir desde el celu al Chromecast.

El gremio del pirata es muy sacrificado 🏴‍☠️


Fuentes:

Agregar Comentario

Tu dirección de email no será publicada. Los comentarios son revisados de forma manual antes de ser publicados.

Gracias por enviar tu comentario

Si todo funciona bien pronto estará visible en el sitio.

Error

Hubo un error con el envío del comentario. Deberías volver a intentarlo.