I am relatively new to Unraid as well as Plex and am experiencing challenges with setting up hardware transcoding in my Plex Docker container. Despite various attempts and configurations, it seems like hardware transcoding is not functioning as expected, and I would greatly appreciate any guidance or suggestions.
System Details:
Unraid Server Version: 6.12.4
Plex Version: 1.32.7.7621
Docker Repository: lscr.io/linuxserver/plex
Hardware: Terramaster F4-423 with an Intel® Celeron® N5095 processor
Storage: Using an SSD cache to enhance performance
Installed Plugins: GPU Statistics and intel-gpu-top
Configuration:
Added Extra Parameters for Plex Docker Container: --device /dev/dri:/dev/dri
Added the /dev/dri device in Plex Docker Container settings
Verified permissions for /dev/dri are set to crwxrwxrwx
Active Plex Lifetime Pass with hardware acceleration enabled in Plex settings
Manually set HardwareDevicePath to /dev/dri/renderD128 in Plex container preferences.xml
lspci -vnn output confirms that the Intel JasperLake UHD Graphics is recognized and the i915 driver is in use
Issues Encountered:
CPU load reaches 100% during transcoding, suggesting possible fallback to software transcoding
No “(hw)” indicator in the Plex dashboard during transcoding processes
I am looking for advice on ensuring that hardware transcoding is properly utilized in my setup. Is there a step I might have missed, or a specific configuration that needs adjustment? Any insights, especially considering my relative newness to Unraid, would be incredibly helpful.
It’s prudent to differentiate between hw transcoding and tone mapping as they use different capabilities of the GPU and drivers (latter uses opencl).
If you’re trying to transcode hdr content and have tone mapping turned on (iirc on by default in Plex), and hw tone mapping (opencl) fails, the entire transcode session falls back to software.
To properly troubleshoot, attempt to transcode sdr content (non-hdr 1080p or 720p) to a lower bandwidth by changing the quality in the web player and see if that works. If it works, hw transcoding is working.
Then you can test hdr content to see if tone mapping (opencl) is the issue. If so, that’s an issue with the upstream project as Plex controls the opencl drivers shipped in the package we install.
Besides the above, i have tried the exact passthrough configuration with plex, but not jellyfin
Edit: i tried the above for i915.conf and it still doesn’t work. I only tried it for plex though, not jellyfin.
Would it help if i enabled or disabled anything in GPU statistics? I saw a video tutorial related to that, but it looks a bit different since then and i wasn’t sure if i should touch anything with that other than that i enabled the JasperLake like in this photo.
Yes. With that all your gpu settings look correct. If it’s still not working, you should report it to Plex as they control the rest of the process including the gpu drivers included in the image.
Thanks the help, how would i go about reporting it to plex?
I will try and mess around with getting it to work with Jellyfin later tonight or tomorrow to see if the issue is with plex or not.
I also found this, but hes running ubuntu. I tried running update-initramfs -u after the i915.confi, but it says command not found. Im guessing that’s specific to his kernel?
One thing you can try if you haven’t already (tried last night, but still did not work for me though) is going into your BIOS and setting your primary graphics to intel GPU instead of AUTO. I read that it worked for some people.
First edit syslinux.cfg on the Unraid USB drive: nano /boot/syslinux/syslinux.cfg
Add the follow where I have shown below “append i915.enable_fbc=1 i915.enable_guc=2” and save your changes.
label Unraid OS
menu default
kernel /bzimage
append i915.enable_fbc=1 i915.enable_guc=2
append initrd=/bzroot
As the Unraid file system is loaded in to ram we want to create and edit an i915.conf in /boot/config/modprobe.d/ - this will persist though reboots.
nano /boot/config/modprobe.d/i915.conf
Add the following to i915.conf and save: options i915 enable_fbc=1 enable_guc=2
Reboot and the i915.conf will be present in /etc/modprobe.d/i915.conf
Add /dev/dri as a device to the Plex Docker if not already done.
Hardware transcoding will now work
I had actually tried this before, however I’d edited /boot/syslinux/syslinux.cfg and /etc/modprobe.d/i915.conf then rebooted, so my /etc/modprobe.d/i915.conf config was lost due to the Unraid filesystem been loaded completely in ram, which I did not realise at the time.