Emby with Hardware Transcoding in Docker on Synology DSM 7.2
I’ve been running my own media server for many, many years in various iterations. Currently I’m trying out Emby as an alternative to Plex after being a bit underwhelmed with Jellyfin‘s Apple tvOS app options (e.g. Swiftfin and Infuse Pro ). I’m not sure if I’ll stick with it; I would prefer to go with fully open source software like Jellyfin. For now though I want to see how it compares. After initially getting things up and running, two things stood out to me right away:
- The Emby tvOS app allows me to easily select different versions of a movie when I have followed the proper instructions to group them (via the audio/subtitle selection screen). This was an important feature for me because several movies in my library have different versions (e.g. Star Wars theatrical, special edition, etc.). Other media servers’ tvOS clients don’t offer that easily, even when I follow the proper naming and folder conventions for them and verify that things are correct via their web UI.
- Hardware transcoding was not working; most of my client players should not need this, but some still do.

My Setup
I installed the Emby server on my Synology DS918+ NAS–which has an Intel CPU that supports Quick Sync–as a Container Manager Project (i.e. a Docker container using Docker Compose). Most of my Docker containers are set up as Container Manager Projects in the DiskStation Manager (DSM) GUI, so I borrowed the Docker Compose YAML from the official Emby docker installation instructions, added my config and media folders as volumes, and added my UID and GID that I use for a dedicated Docker user with restricted access (see https://drfrankenstein.co.uk/step-2-setting-up-a-restricted-docker-user-and-obtaining-ids/). However hardware transcoding was not working even with an Emby Premiere subscription, so I did a little research to try and figure it out.
The Solution
Ultimately the solution (after some inspiration from this post) came down to adding my Synology’s videodriver GID to the GIDLIST environment variable for the container. You can find the GID of this group by connecting via SSH to the Synology and running sudo synogroup --get videodriver. The Group ID will be listed, and that’s what should be entered for the GIDLIST for the project.

Here is my YAML Configuration for this DSM Container Manager Project:
version: "2.3"
services:
emby:
image: emby/embyserver:latest
container_name: embyserver
environment:
- UID=1234
- GID=5678
- GIDLIST=9101
volumes:
- /volume1/docker/emby/config:/config # Configuration directory
- /volume1/Media/TV Series:/mnt/TV Series # Media directory
- /volume1/Media/Movies:/mnt/Movies # Media directory
network_mode: host
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
networks:
docker_default:
external: true
DSM Emby Package
DSM has an Emby package that can be installed via Package Manager. That may be an easier path to Emby hardware transcoding for Synology NAS users. However, I like using Docker if possible and I was up for a challenge, especially since I could not find much definitive information on doing this on a Synology NAS.