Server Version#: 1.41.8.9834
Player Version#: 8.45 (9684, Apple TV) and 2025.22.0 (1195, iOS)
Despite my best efforts, I can’t seem to get Plex to transcode to anything other than 720p or less. I am able to direct play/stream high bitrate content to all clients, but as soon as transcoding is enabled, it’s kneecapped at 720p…
PMS is running as a docker container (ie an “app”) on my TrueNAS server (installed on bare metal). I have an Intel 12700k CPU, and plex pass. Hardware transcoding is enabled and seemingly working. The container is using “host” networking, and my clients (iPhone and Apple TV) are on the local network and on the same subnet as PMS.
In the attachments are screenshots from PMS and Tautulli when I tried to transcode a 4K movie to “1080p HD (High)” on my iPhone, which estimates “20 Mbps (About 9 GB per hour)”. You’ll see that the transcode is using HW (correct) but the output is in “SD” and 3 Mbps 720p (incorrect).
I have tried toggling “Enable HEVC video Encoding”, but it has no effect other than to change the transcode output from H264 to HEVC (but still “SD”). Interestingly, Tautulli reports “Transcode (Speed: 17.2)” instead of “Transcode (Throttled)” when I disable HEVC video encoding. But, regardless, the output is always 720p.
The “Transcode (Throttled)” in my screenshot bothers me, but I have no idea why that would be the case… Perhaps that’s a clue?
I also uploaded the logs which were taken immediately after starting a stream to my iphone with 1080p requested. I’m happy to upload anything else that might help diagnosis.
“Transcode (Throttled)” indicates that the transcoder has already already reached the amount of time you’ve configured for the setting: Settings -> [Select Server Name] -> Transcoder -> Transcoder default throttle buffer
As far as I know the default is 60 seconds; so it’s not surprising that would be reached pretty quickly in your configuration (for H.264). Transcoding to H.265 will take longer to reach a throttled state.
That in particular is nothing to be concerned about and likely has nothing to do with the problem you’re experiencing.
The screenshots suggest that there is a bitrate limit of 3 Mbps in effect for the transcoding. You cannot sensibly cram 1080p resolution into a 3mbps stream, particularly with hardware transcoding which is not optimized for efficiency.
You should investigate
is there a bitrate limit defined in the settings of the client?
is there a bitrate limit defined in the server settings for remote connections?
is the client in a different IP network than the server? (particularly when your LAN is quite complex and uses VLANs, or if the server is hosted within a VM or container)
is there a bitrate limit defined in the settings of the client?
Definitely not intentionally. I’ve searched for any client or server setting which might limit bandwidth to 3 Mbps, and there’s none
is there a bitrate limit defined in the serversettings for remote connections?
I’ll double check if this is the case, but I don’t believe so. I allow all clients, Remote or Local, to have unlimited bandwidth. Also, all clients are local.
is the client in a different IP network than the server? (particularly when your LAN is quite complex and uses VLANs, or if the server is hosted within a VM or container)
Definitely not. Both client and server are on the same subnet. My server is in a container, but the container uses “host” networking, putting it on the same network as the host OS. Port forwarding from my router works to the PMS IP, and PMS reports it had direct internet access. I do believe networking is not the issue.
Enable debug logging in your server.
(Do NOT enable “verbose” logging.)
stop and restart your server.
Start playing the same video again, using the same client. Wait ~2 minutes.
Then fetch the server logs and inspect the Plex Media Server.log
scroll down to the timestamp where playback was initiated.
Give particular attention on lines which are around the string MDE:.
You should find out why transcoding was initiated using the information contained in the logs.
Grabbed the logs, and here’s what I’ve found so far (timestamps removed for brevity):
MDE: Selected protocol hls; container: mkv
MDE: analyzing media item 62289
MDE: Captain America: Brave New World (2025): Direct Play is disabled
MDE: Captain America: Brave New World (2025): media must be transcoded in order to use the hls protocol
MDE: Captain America: Brave New World (2025): no direct play video profile exists for http/mkv/hevc
MDE: Captain America: Brave New World (2025): no direct play video profile exists for http/mkv/hevc/eac3
Captain America: Brave New World - video.width limitation applies: 3840 > 1920
MDE: Captain America: Brave New World (2025): Direct Streaming is disabled, so video stream will be transcoded
MDE: Captain America: Brave New World (2025): no remuxable profile found, so video stream will be transcoded
MDE: Cannot direct stream video stream due to profile or setting limitations
Codecs: testing hevc (decoder) with hwdevice vaapi
Codecs: hardware transcoding: testing API vaapi for device ‘/dev/dri/renderD128’ (Intel AlderLake-S GT1)
…
[Req#5218bd/Transcode] Streaming Resource: Reached Decision id=18194 codes=(General=1001,Direct play not available; Conversion OK. Direct Play=3000,App cannot direct play this item. Direct play is disabled. Transcode=1001,Direct play not available; Conversion OK.) media=(id=62289 part=(id=62365 decision=transcode container=mkv protocol=hls streams=(Video=(id=132254 decision=transcode bitrate=1527 encoder=hevc_vaapi width=704 height=294) Audio=(id=132255 decision=copy channels=6 rate=48000))))
Those last two log entries seem to be contradictory. The first indicates that a decision was reached to play with width=704 and height=294. The second indicates that transcoding decision was videoResolution=1920x1080
With on ly these snippets it is not possible to say anything definitive.
But I tend to assume that the last snippet is in fact from a different plexback attempt, or by a different client.
If you still have “automatic quality” activated, disable it. It never worked as it was supposed to in all situation.
This is definitely from my most recent playback attempt on iPhone. I looked a bit further in the logs, and found this. It appears to be the actual call to the transcoder (FFMPEG).
Notice the line “scale_vaapi=w=704:h=294”. I wish I could figure that out
A bit earlier in the logs is this. You’ll see “videoResolution=1920x1080” and “maxVideoBitrate=20000” which supports the idea that the client is requesting 1080p at 20 mbps, but for some reason the transcoder is being called with 704x294
I enabled verbose logging - no extra information there.
I’ve confirmed “automatic quality” is disabled.
my next step is going to be a firing up a fresh install of PMS in a new container and see if it works better/different. My current install has been migrated from a previous NAS - that shouldn’t matter, but who knows
Is there a “good” way to do that? Obviously I’ll eventually want to restore my old library to preserve watch history. Is this even worth the bother to try?
OK, so I installed a second container instance with fresh config, pointed it to the same library folders, and pointed my clients to the new server. I made no changes to my client configuration and ran the new server with no changes to default settings.
Again, in my iOS client, from the triple-dot menu at the bottom right (while viewing a video) I chose “Quality > 1080p HD (High)”. This is what I see in Plex dashboard and Tautulli
I just can’t figure out what is wrong with my original server and I don’t want to run with this new server because I’ve lost all my view history, and I’ll have to adjust my library shares for all users. There has to be a better way…
Is there some way to reset all settings in an existing Plex Server instance? I don’t want to lose my shares or view history…
I diffed the Preferences.xml on my new instance with my old instance, and noticed the following important details
Problematic settings in my old file:
TranscoderVideoResolutionLimit="704x480": The main culprit, capping my resolution.
HardwareDevicePath="8086:4680:...": This appears to be a hardcoded path to the GPU from my old system. While it might work by coincidence, it’s brittle and unnecessary on the new system (let Plex auto-detect)
I stopped my server, saved my Preferences.xml as Preferences.xml.bak, and restarted the server. After the usual song and dance, I was back up and running. All libraries were restored, all history was maintained, and most importantly… transcoding is working as it should.
Hope this helps someone else in the future.
Oh, one more thing… there is almost no information about that “TranscoderVideoResolutionLimit” setting online. No idea why that was set. My old server was not very powerful, so possibly Plex distributions for that NAS were intentionally kneecapped for performance reasons.
I did find this:
It says:
transcoderVideoResolutionLimit (text)
Maximum video output resolution for the transcoder. (default: 0x0)
It also talks about hardwareDevicePath (text) as an Undocumented Setting.