Instalar Jellyfin en un Synology NAS en Docker con Hardware Transcoding
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.
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>
.
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.
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:
Y todo esto para poder transmitir desde el celu al Chromecast.
El gremio del pirata es muy sacrificado 🏴☠️
Fuentes:
- https://jellyfin.org/docs/general/installation/container (comando docker run completo)
- https://hub.docker.com/r/linuxserver/jellyfin (parámetro –device)
- https://adminkb.com/install-jellyfin-synology-docker-hardware-transcoding/ (permisos /dev/dri)
Cargando Comentarios
Error
Hubo un error cargando los comentarios.
No hay comentarios
Podés ser la primera persona en dejar un comentario.
Agregar Comentario
Tu dirección de email no será publicada. Los comentarios son revisados de forma manual antes de ser publicados.
Enviando
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.