PMS + Linux + AMD Vega = (No Hardware Acceleration)?

Server Version#: 1.42.2.10156

I am running PMS on ubuntu 24.04 LTS with the Linux® Drivers for AMD Radeon™ Graphics v25.10.4 release on 9-24-2025. Official ffmpeg, as provided by ubuntu can transcode from HEVCMain10 to H264 using hardware acceleration for both encode/decode, and the HDR tone mapping is fine.

Plex Transcoder however is unable to detect and use hardware encoding, and throws various errors from missing symbols due to glibc wrapper’s versions being too old to just not working. When using iPhone plex app, every transcoded video goes straight to 720p (PNG) or uses 100% cpu.

I used to run on Synology NAS, but it just can’t keep up with HEVC codecs anymore, so this is my most powerful appliance for this type of work. I am about to try the beta to see if it’s any better, but since it’s compiled on Ubuntu 16 (which is way out of support), I suspect I will be looking at the same issue still.

I do have one more last ditch attempt to migrate to an older appliance with an N95 cpu, instead off my Ryzen appliance, though I really don’t want to do that. I know that this box, running ffmpeg can safely run 4 transcoding sessions with very little cpu work load. The key is just to get it working that way with plex.

The specific error I get using AMD’s drivers are:
[AVHWDeviceContext @ 0x7efadb4dae40] libva: dlopen of /opt/amdgpu/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so failed: Error relocating /opt/amdgpu/lib/x86_64-linux-gnu/dri/radeonsi_drv_video.so: __isoc23_strtoul: symbol not found

As such, even the beta version of plex still does not support the C23 symbol __isoc23_strtoul. would be nice if we could use a modern glibc built driver.

Can you pick the AMD GPU in SettingsTranscoderHardware transcoding device?

Plex has limited support for AMD GPUs on Linux. Transcoding is limited to SDR video and HEVC encoding is not supported.

I do not know if any additional drivers are necessary for Plex to detect and use the AMD GPU.

Are you serious? Ugh…. Okay. I guess I will have to try and make this work on my N95 NUC then. That’s a real shame. I can handle twice as many transcoding session on this box than the N95 box, at twice the frame rate. Okay, well that explains it. What a sad day.

The same issues exist on my Intel N95 but with different cause. Now the I migrated over to my last server running Ubuntu 24.04 with Intel N95 cpu, using either the free or non-free versions of iHD, I can run the exact same command on ffmpeg which works, but not on Plex Transcoder, which errors with:

[AVHWDeviceContext @ 0x744444a99dc0] Failed to initialise VAAPI connection: -1 (unknown libva error).
Device creation failed: -5.
Failed to set value ‘vaapi=va:/dev/dri/renderD128’ for option ‘init_hw_device’: I/O error

The command for the test is:

sudo -u plex -H bash -lc ‘/usr/lib/plexmediaserver/Plex\ Transcoder -init_hw_device vaapi=va:/dev/dri/renderD128 -f lavfi -i testsrc=size=128x128:rate=30:duration=3 -vf “format=nv12,hwupload,scale_vaapi=w=640:h=360” -c:v h264_vaapi -an -y /tmp/vaapi_ok.mp4 && echo VAAPI_OK || echo VAAPI_FAIL’

This came from various AI engines that I have invoked to try and narrow down the unknown source…

This manifests in plex client as a generic error about not support direct stream…

I keep getting runtime errors with the transcoder, and when I test Plex Transcoder directly, I see glibc errors of missing symbols due to iHD drivers being build with a much newer glibc (because I am on ubuntu 24.04, and Plex is built against a much older libc).

Plex includes the necessary drivers. It does not use the manually installed free/non-free drivers (it did at one time, but that was many versions ago).

On the N95 system:

Make sure Plex is configured for debug server logs. Do not enable verbose logs.
Settings → server_name → General + Show Advanced

If enabled, disable HEVC video encoding in settings → transcoder.

Stop Plex, wait 30 seconds, start Plex, wait 2 minutes for Plex to log the startup.

Play a video that transcodes.

After the problem re-occurs, pull the log files and post to the thread.

For full hardware transcoding on linux you are going to want/need an intel chip with integrated graphics. Anything from 7th gen to current will work. Arc is iffy so I’d still stay away from that for now. But Iris XE is very powerful.

To add to FordGuy,

Plex is built again MUSL. It does not use glibc.
MUSL libraries are included with each PMS package.

This is done to ensure “libc” compatibility across all platforms.


This is the OpenCL library version mismatch.


This is based on Plex not using glibc.



FFMPEG 6.1 (which is about to be Public) sets the stage for us to add AMD (HEVC / HDR / external GPU ) support … Something long overdue.

We only need add the AMD drivers to the build and enumerate the GPUs supported by those drivers

so, I have probably been shooting myself in the foot. okay, I will rollback all the changes I made to the plex runtime to rely on the plex version of the driver. Should I remove my OS support for the iHD device too?

Thanks

You do not need to. I have them installed on my Plex server.

On Roku Plex app, it tells me “App cannot direct play this item. Direct play is disabled” when I ask to stream at 720pThe log has:

Oct 02, 2025 20:04:31.736 [124137113140024] DEBUG - [Req#3934/Transcode] Codecs: testing hevc (decoder) with hwdevice vaapi
Oct 02, 2025 20:04:31.736 [124137113140024] DEBUG - [Req#3934/Transcode] Codecs: hardware transcoding: testing API vaapi for device '/dev/dri/renderD128' (Intel Alder Lake-N [UHD Graphics])
Oct 02, 2025 20:04:31.737 [124137113140024] ERROR - [Req#3934/Transcode] [FFMPEG] - Failed to initialise VAAPI connection: -1 (unknown libva error).
Oct 02, 2025 20:04:31.737 [124137113140024] DEBUG - [Req#3934/Transcode] Codecs: hardware transcoding: opening hw device failed - probably not supported by this system, error: I/O error
Oct 02, 2025 20:04:31.737 [124137113140024] DEBUG - [Req#3934/Transcode] Could not create hardware context for hevc

@ChameleonXtreme

I have a Roku 3800X. May I get a sample (1 minute or so) of the file to try with my Roku ?

I have AlderLake i9-12900 and AlderLake N100 CPUs so should be able to repro your problem.

You can use dd to cut off a chunk about 1 GB if you like. (easiest)
I’ll PM you so you can share the link to it.

The Intel N95 is a 12th gen (Alder Lake) CPU. The N series basically replaced the Celerons / Pentiums. It has 4 cores (no hyper threading ) and operates at fixed CPU speed like an i3. As an ffmpeg Transcoder, it can handle 3 concurrent HEVC hardware accelerated streams at 1080p. This is a BeeLink Intel NUC PC that I use as a transcoding server, and am repurposing as a plex media server because the Synology NAS is simply too slow, and too limited. I have three such nodes, all different specs. This one, an N5095 (Jasper Lake) that can only do 1-2 streams and can’t do h265 Min 10 profile well, so I use that one for just H264 transcoding, then I have the AMD Ryzen 5 which has 6 cores and dual threads per core. I would prefer the AMD for this, bus SD only isn’t going to work for me. I rely on hardware acceleration to be able to stream my shows efficiently with 30-40W computers instead of 500w+ computers.

So, my CPU is not in question. All three are more than enough to replace my NAS for hardware accelerated transcoding and modern architectures. This is purely an issue of I really screwed up, or I am doing something place users have not complained about yet. I am running bare metal, not docker, for personal reasons.

When you send me the sample file,

Would you please be able to send me the PMS DEBUG log files ZIP as well?

  1. Ensure DEBUG logging on, VERBOSE logging off
  2. Restart PMS (so I can see the GPU identification during startup)
    and the drivers loading
  3. Wait 2 minutes for it to all stabilize
  4. Now attempt playback
  5. Stop when it fails
  6. Download the Logs ZIP file and send to me.

From the linux level:

  1. ls -la /dev/dri
  2. groups plex (or the UID you run plex as)

Both my AlderLake CPUs can confirm what’s happening with that video & your HW transcoding in general

➜ ~ ls -la /dev/dri

total 0

drwxr-xr-x 3 root root 100 Oct 2 05:26 .

drwxr-xr-x 21 root root 4380 Oct 2 06:25 ..

drwxr-xr-x 2 root root 80 Oct 2 05:26 by-path

crw-rw---- 1 root render 226, 0 Oct 2 05:26 card0

crw-rw---- 1 root render 226, 128 Oct 2 05:26 renderD128

➜ ~ id plex

uid=1027(plex) gid=988(plex) groups=988(plex),44(video),100(users),993(render),655538(plexusers)

➜ ~ groups plex

plex : plex video users render plexusers
To re-produce, I have to set the resolution to 720p (low bitrate) or it will choose the direct play instead of transcode.

plex_diag_bundle.zip (4.9 MB)

@ChameleonXtreme

Are you using a self-signed certificate ?

Oct 07, 2025 04:53:29.672 [127887742282552] WARN - [HttpClient/HCl#2a] HTTP error requesting GET http://192.168.0.2:80/discover.json (60, SSL peer certificate or SSH remote key was not OK) (SSL certificate problem: self-signed certificate)

If so, it won’t work.
PMS requires certificates issued from a proper Certificate Authority (CA) like Let’s Encrypt.

Everything else I see in your log seems to be as a result of this certificate.

Here, you can see that it can’t find the CPU ( it doesn’t have the codecs)

Oct 07, 2025 04:54:57.625 [127887773997880] DEBUG - [Req#1d25/Transcode] Starting a transcode session 41a9b9de-ef21-492a-9214-0f09c2294c80-52 at offset -1.0 (state=3)
Oct 07, 2025 04:54:57.625 [127887773997880] DEBUG - [Req#1d25/Transcode] TPU: hardware transcoding: enabled, but no hardware decode accelerator found
Oct 07, 2025 04:54:57.625 [127887773997880] DEBUG - [Req#1d25/Transcode] [Universal] Using local file path instead of URL: /volume1/Videos/Television/Grand Designs (1999)/Season 26/Grand Designs - S26E03 - North London 2025.mp4
Oct 07, 2025 04:54:57.626 [127887773997880] DEBUG - [Req#1d25/Transcode] TPU: hardware transcoding: final decoder: , final encoder: 
Oct 07, 2025 04:54:57.626 [127887773997880] DEBUG - [Req#1d25/Transcode/JobRunner] Job running: FFMPEG_EXTERNAL_LIBS='/var/lib/plexmediaserver/Library/Application\ Support/Plex\ Media\ Server/Codecs

It did find the hardware:

Oct 07, 2025 04:53:19.637 [127887801805624] INFO - Preemptively preparing driver imd for GPU Intel Alder Lake-N [UHD Graphics]
Oct 07, 2025 04:53:19.637 [127887801805624] DEBUG - [DriverDL/imd] Skipping download; already exists
Oct 07, 2025 04:53:19.637 [127887801805624] INFO - Preemptively preparing driver icr for GPU Intel Alder Lake-N [UHD Graphics]
Oct 07, 2025 04:53:19.637 [127887801805624] DEBUG - [DriverDL/icr] Skipping download; already exists

No idea about the error, but no I am not using a self signed certificate. The url and protocol both state http, so ssl should not even be in play. The only ssl would be the plex ssl settings for remote access using the provided certificate.

Your server has it’s own Let’s Encrypt signed CA assigned when claimed and renewed monthly.

The apps are all built and signed with the company’s master certificate (issued by Plex’s CA)

Whatever that device is (192.168.0.2), on port 80 (which is normally a HTTP server port and not a standard Plex port) must be carrying its own certificate.

Is there a Proxy connecting to the server?

Getting back to your GPU issue,

Are you trying to use the AMD or the built-in UHD Graphics of the N95?
Is there a container involved?

The built in Intel iHD gpu.

The .2 address is just my WiFi access point. It scans the network for devices to map it out. Maybe that’s the traffic you are seeing. It’s just an AP, not doing routing at all. I see the log says /discover. That makes sense. It’s the SSDP auto discovery. You can ignore that address.

I have more details. I had tried using tmuxai (tied to ChatGPT) to see if it could get hardware transcoding working. It renamed Plex Transcoder and replaced it with a bash script to emulate it through calls to ffmpeg. I rolled it back, and it’s not crashing now, but it’s still using cpu instead of GPU for transcoding that should be 100% gpu.

I migrated from a NAS, and since PMS downloads the driver for the gpu, I wonder if there is a way to purge the GPU code and force a re-download?