Server Version#: v.1.43.0.10492-121068a07 (Docker Unraid)
Player Version#: v.1.112.0.359-0d79a49f (Win11 ARM)
I am currently experiencing an issue when watching media with the Plex Desktop Application on my Laptop.
The issue is that media using the HEVC Main 10 Profile (10Bit h265) is seemingly not hw decoded (GPU decode doesn’t show any activity in Task Manager) and falling back on sw decode. When playing the same file in the Edge Browser, GPU decode activity can be observed.
Note: The playback information in plex is always showing direct play so no server side transcoding is taking place during these tests.
Playback of files using h265 8Bit and h264 8Bit are both using gpu accelerated hw decoding.
Furthermore I have confirmed that my gpu actually has support to decode the hevc main 10 profile and this seems to be a bug with plex.
I did some testing using 2 hevc main 10 files. But this only created more questions since the plex desktop player would only fall back on sw decoding for one of the files. I also tested some other players with different options which shows that hw decoding is possible for these files using my gpu (adreno x1-85). It also shows it that hw decoding works if x64 applications are emulated on windows arm.
hwdec-fail.mkv can be ignored since i also saw a thread of someone having similar issues on the qualcomm discord.
This shows HW Decoding should be possible for these files but for some reason the plex client falls back to software decoding.
Testresults:
╔════════════════════════════════════╦══════╦═══════╦════════════════╗
║ ║ Fil1 ║ File2 ║ hwdec-fail.mkv ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ plex (x64) ║ SW ║ HW ║ SW ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ mpv (x64) ║ SW ║ SW ║ SW ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ mpv (x64) (hwdec=d3d11 in cfg) ║ SW ║ SW ║ HW ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ mpv (x64) (hwdec=d3d11va in cfg) ║ HW ║ HW ║ ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ mpv (x64) (hwdec=vulkan in cfg) ║ SW ║ SW ║ ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ mpv (arm64) ║ SW ║ SW ║ SW ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ mpv (arm64) (hwdec=d3d11 in cfg) ║ SW ║ SW ║ SW ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ mpv (arm64) (hwdec=d3d11va in cfg) ║ HW ║ HW ║ HW ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ mpv (arm64) (hwdec=vulkan in cfg) ║ SW ║ SW ║ ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ vlc (arm64) ║ HW ║ HW ║ ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ firefox (arm64) (plexWeb) ║ HW ║ HW ║ ║
╠════════════════════════════════════╬══════╬═══════╬════════════════╣
║ edge (arm64) (plexWeb) ║ HW ║ HW ║ ║
╚════════════════════════════════════╩══════╩═══════╩════════════════╝
MediaInfo of File1.mkv:
Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main 10@L4@Main
Codec ID : V_MPEGH/ISO/HEVC
Duration : 35 s 680 ms
Bit rate : 2 361 kb/s
Width : 1 920 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate mode : Constant
Frame rate : 25.000 FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 10 bits
Bits/(Pixel*Frame) : 0.046
Stream size : 10.0 MiB (100%)
Default : Yes
Forced : No
Color range : Limited
Color primaries : BT.709
Transfer characteristics : BT.709
Matrix coefficients : BT.709
Mediainfo of File2.mkv
Video
ID : 1
Format : HEVC
Format/Info : High Efficiency Video Coding
Format profile : Main 10@L4@Main
Codec ID : V_MPEGH/ISO/HEVC
Duration : 41 s 750 ms
Bit rate : 2 906 kb/s
Width : 1 920 pixels
Height : 800 pixels
Display aspect ratio : 2.40:1
Frame rate mode : Constant
Frame rate : 23.976 (24000/1001) FPS
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 10 bits
Bits/(Pixel*Frame) : 0.079
Stream size : 14.5 MiB (100%)
Writing library : x265 1.9+200-6098ba3e0cf16b11:[Windows][GCC 5.3.0][64 bit] 10bit
Encoding settings : wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=1 / tu-inter-depth=1 / me=1 / subme=2 / merange=57 / no-rect / no-amp / max-merge=2 / temporal-mvp / no-early-skip / recursion-skip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=250 / min-keyint=23 / scenecut=40 / rc-lookahead=20 / lookahead-slices=5 / bframes=4 / bframe-bias=0 / b-adapt=2 / ref=3 / limit-refs=3 / no-limit-modes / weightp / no-weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=3 / psy-rd=2.00 / rdoq-level=0 / psy-rdoq=0.00 / no-rd-refine / signhide / deblock=0:0 / sao / no-sao-non-deblock / b-pyramid / cutree / no-intra-refresh / rc=2 / pass / bitrate=2480 / qcomp=0.60 / qpmin=0 / qpmax=51 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ipratio=1.40 / pbratio=1.30
Default : Yes
Forced : No
Can you please confirm what the transcoding settings used are? A screenshot of the /settings/transcoder page, calling you each of the transcoder related settings, or a copy of your Preferences.xml, registry export, or plist (you never identify the server host OS). Please not that these files contain your email address and token information, so if you choose to share them please do so via DM.
Can you please do the following;
- Confirm server DEBUG logging is enabled, VERBOSE logging is disabled.
SAVE if changes.
- Restart PMS
- Give it two minutes to start and stabilize
- Start a playback which shows the issue
- Let it play for 20 seconds
- Stop the playback
- Download the server logs
- Attach the logs so I may see them.
Thank you for the quick response. I captured the screenshots, logs and added additional information about the platforms to the original post. I send you everything in a private message.
But it think the server logs will probably only show direct play so i additional captured some logs of the client.
Furthermore i tried the modifying mpv.conf file in the plex folder since the plex desktop app relies on mpv to playback the video and earlier tests with standalone mpv using a modified config showed promising results (see table).
But it seems that adding hwdec=d3d11va to the conf file is completly ignored by the plex desktop player and hw decoding is still not possible on the tested file.
I did some further testing using the plezy windows client (arm64 1.30) since it is also using mpv for video playback. And it turned out that plezy uses gpu decoding without any issues here, i did not even need to modify the mpv.conf file.
I looked a bit deeper into this problem and actually managed to fix it.
The solution is to replace the mpv version which comes packaged with the plex windows player.
Steps to fix the Problem:
0.) Close the windows Plex client
1.) go to https://github.com/mitzsch/mpv-winbuild/releases/latest
2.) download mpv-dev-x86_64-XXXXXXXX-git-XXXXXXX.7z or mpv-dev-x86_64-v3-XXXXXXXX-git-XXXXXXX.7z
3.) extract and copy the libmpv-2.dll
4.) go to C:\Program Files\Plex\Plex or whatever the install location of your plex client is.
4.5) make a backup of the libmpv-2.dll
5.) overwrite the libmpv-2.dll in this folder with the one you just downloaded
6.) Plex is now working again congratulations
It seems that the mpv version which is packaged with the plex windows client is somehow buggy or just old. So this should be easily fixed by an update