Quick sync is a great way to handle hardware transcoding in plex, and also comes on most intel CPUs, so using it becomes more a why wouldn’t you question. In my plex installation, I hadn’t even realized that I was leaving this performance on the table, so here’s how I enabled it and got it to run.
I have a Xeon E3-1245, with the specs below for the GPU on it. As can be seen, it does support Quick Sync video.
The process to enable it is pretty simple. We first need to check if /dev/dri exists. If not, we need to run a modprobe i915 command, which will create the device and enable us to use it. We do need that /dev/dri to be accessible to everyone in order for our container to access it, so chmod 777 it is.
root@ShadowOfIntent:~# cd /dev/dri -bash: cd: /dev/dri: No such file or directory root@ShadowOfIntent:~# modprobe i915 root@ShadowOfIntent:~# cd /dev/dri root@ShadowOfIntent:/dev/dri# ls by-path/ card0 renderD128 root@ShadowOfIntent:/dev/dri# chmod -R 777 /dev/dri root@ShadowOfIntent:/dev/dri# ls -lah total 0 drwxrwxrwx 3 root root 100 Jun 2 14:05 ./ drwxr-xr-x 16 root root 3.6K Jun 2 14:05 ../ drwxrwxrwx 2 root root 80 Jun 2 14:05 by-path/ crwxrwxrwx 1 root video 226, 0 Jun 2 14:05 card0 crwxrwxrwx 1 root video 226, 128 Jun 2 14:05 renderD128
Now that we have the quick sync device enabled and ready, we just need to add it to the docker container. Note this is a device type config, not a path type input (trust me, the path doesn’t work, I missed the device detail on my first attempt at enabling it).
The docker command below is how unraid ended up creating the container
Command: root@localhost:# /usr/local/emhttp/plugins/dynamix.docker.manager/scripts/docker run -d --name='OfficialPlex' --net='bridge' -e TZ="America/Chicago" -e HOST_OS="Unraid" -e 'ADVERTISE_IP'='http://192.168.1.211:32400/' -e 'PLEX_CLAIM'='claim-XXXXXXXXXXXXXXXXXXXX' -e 'ADVERTISE_IP'='http://YYY.YYY.Y.YYY:32400' -p '32400:32400/tcp' -p '3005:3005/tcp' -v '/mnt/user/Settings/Plex/temp/':'/transcode':'rw' -v '/mnt/user/':'/data':'ro' -v '/mnt/cache/Settings/PlexMediaDocker2/':'/config':'rw' --device='/dev/dri' 'plexinc/pms-docker:188.8.131.5273-8dcc73a59' The command finished successfully!
Now to keep the settings working over reboots, we do need to update the /boot/config/go script to include the modprobe and chmod commands.
With my old CPU, I was able to hardware transcode h264 content, but not h265 4k content. This limits the usefulness of it, however its still extra performance for my primarily h264 library.
While I’m unable to currently use hardware transcoding for h265 content, having the infrastructure there for my next hardware upgrade will be useful. I will also be able to make use of the hardware transcoding for my current library which only has 2 4k / h265 videos in it.