Enabling Quick Sync For Plex on Unraid

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.

CPU Specifications

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).

Adding the Quick Sync Device

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:1.24.5.5173-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.

Conclusion

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.

Resources