Server Version#: latest, Linux Ubuntu
Player Version#: latest
Description:
When selecting a reduced quality profile (e.g., 720p 4 Mbps) in Plex Desktop App or Plex Web on Windows, the client initially sends a transcode request (/transcode/universal/decision) and server starts transcoding using GPU (NVIDIA nvenc).
However, the client almost immediately cancels this transcoded stream (connection reset) and starts requesting the original file directly via HTTP Range requests, effectively forcing Direct Play.
This issue is reproducible only when using GPU-based transcoding on Linux (e.g., Tesla P4). CPU transcoding works fine.
On iPhone, iPad, Android TV apps — transcoding works as expected with GPU.
Mac OS not tested yet.
Repro steps:
- Select “Convert to 720p” in Plex Desktop App or Plex Web.
- Start playback of a high-bitrate file.
- Observe logs — server starts transcoding, then client aborts and switches to original file.
Expected behavior:
Client should strictly honor the selected playback quality and continue using transcoded stream, never forcibly switching back to Direct Play.
Actual behavior:
Client cancels GPU transcode session and plays original file, ignoring selected quality and bitrate settings.
Additional context:
Problem affects:
- Plex Desktop App (Windows)
- Plex Web (any browser, any OS including Windows, iOS Safari, Android Chrome, etc.)
Transcoding with GPU (nvenc) works fine in:
- iPhone App
- iPad App
- Android App
- Android TV
CPU transcoding works everywhere as expected.
Example log excerpts
Initial transcode decision
DEBUG - [Req#XXXX/Transcode] TranscodeUniversalRequest: using profile Plex Desktop
DEBUG - [Req#XXXX/Transcode] Codecs: testing h264_nvenc (encoder)
DEBUG - [Req#XXXX/Transcode] Codecs: hardware transcoding: testing API nvenc for device 'pci:0000:03:00.0.' (Tesla P4)
VERBOSE - [Req#XXXX/Transcode] Nvenc initialized successfully
Client abruptly closes transcoded stream
DEBUG - Failed to stream media, client probably disconnected after X bytes: 104 - Connection reset by peer
DEBUG - Completed after connection close: [client IP:port] 206 GET /library/parts/.../file.mkv
VERBOSE - [IDLE] Server is now idle
Client switches to original file
DEBUG - Request: GET /library/parts/.../file.mkv (Direct Play request via HTTP Range)
Visual sequence
Client asks for transcode decision and server starts GPU transcoding.
Client closes transcoded stream (reset by peer).
Client immediately starts HTTP Range request for original file (Direct Play).
Please investigate. This prevents correct usage of GPU transcoding on Linux when using Plex Desktop or Web clients, while mobile native apps work fine.