-
-
Notifications
You must be signed in to change notification settings - Fork 228
Description
Is there an existing issue for this?
- I have searched the existing issues
Current Behavior
VAAPI hardware transcoding fails with exit code 187 in ClusterPlex workers (and reproducible
directly via Plex Transcoder binary). Plex's bundled libva 2.21.0 returns:
[AVHWDeviceContext @ 0x7f977c3a7dc0] No VA display found for device /dev/dri/renderD128.
Device creation failed: -22.
Failed to set value 'vaapi=vaapi:/dev/dri/renderD128' for option 'init_hw_device': Invalid argument
Error parsing global options: Invalid argument
This occurs regardless of whether LIBVA_DRIVERS_PATH points to Plex's own bundled iHD driver
(/usr/lib/plexmediaserver/lib/dri) or the system iHD driver (/usr/lib/x86_64-linux-gnu/dri).
Both renderD128 and card0 fail identically. Tests were run as root inside the container,
ruling out group permission issues entirely.
Suggested Fix / Upstream Request
This is ultimately a Plex upstream issue (bundled musl libva 2.21.0 + iHD 24.1.5 cannot
initialise VAAPI on N150 + kernel 6.12)
1 update bundled libva beyond 2.21.0 and iHD beyond 24.1.5
2 Document the limitation in the image README for users on Debian Trixie / kernel 6.12+
with Alder Lake-N hardware
3 Investigate whether a custom init script can patch Plex's libva path at container startup
once a compatible musl-built libva becomes available
As a work around, I am currently using FFMPEG_HWACCEL=none (CPU transcoding) which works correctly.
Software transcoding across 3 N150 nodes via ClusterPlex is functional this way, but I as a lifetime pass holder i would love to have proper hw transcoding on my shiny new setup.
Expected Behavior
VAAPI hardware transcoding initialises successfully and Plex Transcoder is able to use Intel
Gen 12 Xe GPU on the N150 for encode/decode acceleration.
Steps To Reproduce
Steps to Reproduce
Deploy linuxserver/plex:latest on Debian Trixie (kernel 6.12) with Intel N150 hardware
Mount /dev/dri:/dev/dri in the container
Set FFMPEG_HWACCEL=vaapi, LIBVA_DRIVER_NAME=iHD
Attempt a transcode or run the transcoder binary directly:
bashdocker exec -it sh -c "
LIBVA_DRIVER_NAME=iHD
LIBVA_DRIVERS_PATH=/usr/lib/plexmediaserver/lib/dri
/usr/lib/plexmediaserver/'Plex Transcoder'
-init_hw_device vaapi=vaapi:/dev/dri/renderD128
-hwaccel vaapi -hwaccel_output_format vaapi 2>&1
| grep -v 'configuration:|enable|disable|rpath|conan|extra'"
Result: No VA display found for device /dev/dri/renderD128. Device creation failed: -22.
Environment
OS: Debian Trixie (Debian 13)
How docker service was installed: Docker via apt (Docker Swarm mode)
Linux kernel: 6.12.63+debl3-amd64
Architecture: x86-64
CPU / iGPU: Intel N150 (Alder Lake-N, Gen 12 Xe Graphics) × 3 nodes
Linuxserver/plex image version: 1.43.0.10492-121068a07-ls295 (latest at time of report)
Plex FFmpeg build: 74455c4-a119aa85fdef32b7dbfbf8a2
Plex bundled libva version: 2.21.0-9
Plex bundled iHD driver version: intel-media-driver 24.1.5
System libva: 2.22.0 (Debian Trixie)
System iHD driver: intel-media-va-driver-non-free 25.2.3CPU architecture
x86-64
Docker creation
version: '3.8'
services:
plex:
image: ghcr.io/linuxserver/plex:latest
networks:
- proxy_public
- clusterplex_private
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- VERSION=docker
- DOCKER_MODS=ghcr.io/pabloromeo/clusterplex_dockermod:latest
- CLUSTER_MODE=remote
- ORCHESTRATOR_URL=http://orchestrator:3500
- PMS_SERVICE=plex
- LOCAL_RELAY_ENABLED=1
- LOCAL_RELAY_PORT=32499
volumes:
- /mnt/containerdata/plex/config:/config
- /mnt/synology/watchables:/data
- /mnt/containerdata/plex/config/Codecs:/codecs
- /mnt/containerdata/plex/transcode:/transcode
- /mnt/containerdata/plex/wgetrc_insecure:/etc/wgetrc:ro
ports:
- 32400:32400
- 32499:32499
deploy:
placement:
constraints: [node.hostname == Portainer-vm1]
orchestrator:
image: ghcr.io/pabloromeo/clusterplex_orchestrator:latest
networks:
- clusterplex_private
environment:
- TZ=Europe/London
- LISTENING_PORT=3500
- WORKER_SELECTION_STRATEGY=LOAD_RANK
deploy:
placement:
constraints: [node.hostname == Portainer-vm1]
worker:
image: ghcr.io/linuxserver/plex:latest
networks:
- clusterplex_private
environment:
- PUID=1000
- PGID=992
- TZ=Europe/London
- VERSION=docker
- DOCKER_MODS=ghcr.io/pabloromeo/clusterplex_worker_dockermod:latest
- ORCHESTRATOR_URL=ws://orchestrator:3500
- LISTENING_PORT=3501
- WORKER_CPU_STAT_INTERVAL=2000
- EAE_SUPPORT=1
- FFMPEG_HWACCEL=vaapi
- LIBVA_DRIVER_NAME=iHD
- LIBVA_DRIVERS_PATH=/usr/lib/plexmediaserver/lib/dri
- INTEL_LOWPOWER_ENCODE=1
volumes:
- /mnt/synology/watchables:/data
- /mnt/containerdata/plex/config/Codecs:/codecs
- /mnt/containerdata/plex/transcode:/transcode
- /dev/dri:/dev/dri
- /mnt/containerdata/plex/wgetrc_insecure:/etc/wgetrc:ro
deploy:
mode: global
restart_policy:
condition: on-failure
networks:
proxy_public:
external: true
clusterplex_private:
driver: overlay
attachable: trueContainer logs
Worker container startup (ClusterPlex dockermod) — no errors, workers connect successfully:
EAE_EXECUTABLE => /codecs/74455c4-.../EasyAudioEncoder
FFMPEG_HWACCEL => vaapi
Setting hwaccel to vaapi
Transcoder exit: child process exited with code 187
Completed transcode
Transcoder close: child process exited with code 187
Manual transcoder test inside container:
ffmpeg version 74455c4-a119aa85fdef32b7dbfbf8a2 Copyright (c) 2000-2025 the FFmpeg developers
built with Plex clang version 11.0.1
libavutil 58. 29.100 / 58. 29.100
libavcodec 60. 31.102 / 60. 31.102
libavformat 60. 16.100 / 60. 16.100
libavfilter 9. 12.100 / 9. 12.100
libswscale 7. 5.100 / 7. 5.100
libswresample 4. 12.100 / 4. 12.100
[AVHWDeviceContext @ 0x7f977c3a7dc0] No VA display found for device /dev/dri/renderD128.
Device creation failed: -22.
Failed to set value 'vaapi=vaapi:/dev/dri/renderD128' for option 'init_hw_device': Invalid argument
Error parsing global options: Invalid argumentMetadata
Metadata
Assignees
Labels
Type
Projects
Status