Server Version: 1.42.2.10102
Player Version: 2025.24.0
TL;DR: The Android Plex app buffers after ~1–2 minutes on LAN only when video = Direct Play and audio = Transcode (4K HEVC DoVi + TrueHD). Other clients are fine (AndroidTV, Web).
Environment
-
Server: Plex Media Server (Docker/TrueNAS app)
-
OS/Host: TrueNAS SCALE
-
Hardware: plenty of CPU; 8 GB RAM
-
/transcode: tmpfs in RAM, current throttle buffer = 300 s, 32 GB tmpfs RAM
-
Client that buffers: Plex for Android (Mobile)
-
Device: Samsung SM-A546E (Galaxy A54)
-
Android 15
-
Plex version: 2025.24.0
-
-
Clients that do NOT buffer: Plex Web on laptop (LAN), other non-Android clients
-
Network: pure LAN; Dashboard shows Local connections; LAN throughput ~300+ Mbit/s
-
Movie source: 4K HEVC DoVi + TrueHD | Bluray-UHD Remux (very high bitrate)
Symptom
On Plex for Android (Mobile), playback starts normally but begins constant buffering after ~1–2 minutes when the video is Direct Play and audio is transcoded (typical source: 4K HEVC DoVi P7 Main 10 + TrueHD Atmos 7.1).
-
If I force full transcode to 1080p (video+audio), playback is smooth and stable.
-
If I play the original with Direct Play on video an transcode (Opus) on the TrueHD Atmos audio, the Android app will start buffering after about 2 minutes and buffers every 2 seconds after that.
-
On Plex Web (laptop on LAN), the same titles play smoothly in all transcode/DP configurations.
What I’ve tried
-
Throttle buffer: set to 300 s (currently). I tried other configurations too: from 60s up to 900s (which had me to increase the tmpfs memory limit to 32 GB to avoid OOM). Nothing fixed the issue.
-
Verified LAN:
-
Dashboard shows Local connection and LAN IPs.
-
Bandwidth analytics show different patterns depending on mode:
-
Direct Play video + audio transcode → large bandwidth spikes (client slurps 200+ Mbit/s bursts for a couple seconds, then goes idle → buffer drains → spinner).
-
Full transcode (video+audio) → flat, steady bandwidth.
-
-
-
Cross-client check:
-
Plex Web handles audio transcode fine (smooth).
-
Only the Android app buffers with video Direct Play + audio transcode.
-
Evidence
SessionReport (Android)
<Variant ... sourceVideoCodec="hevc" sourceAudioCodec="truehd"
videoDecision="copy" audioDecision="transcode"
protocol="hls" container="mkv" videoCodec="hevc" audioCodec="opus"
audioChannels="8" transcodeHwRequested="1" transcodeHwFullPipeline="0">
<Stream ... displayTitle="4K DoVi/HDR10" ...(HEVC Main 10)... decision="copy" />
<Stream ... displayTitle="English (TRUEHD 7.1)" ... decision="transcode" ... codec="opus" channels="8" />
-
Video = Direct Play (copy).
-
Audio = Transcoded (TrueHD → Opus 7.1).
-
Protocol = HLS; large
.ts
segments (e.g., 61 MB for ~10 s). -
Bandwidth analytics show spike → zero → spike → zero pattern in LAN bursts.
Analysis / Hypothesis
-
When video is Direct Play but audio is transcoded, Plex (on Android) uses HLS TS delivery.
-
HLS requires both audio + video to be muxed together before writing a segment.
-
Video (copy) is instant.
-
Audio (encode) is real time.
-
-
This creates burst → idle → burst traffic:
-
Segment dumps in a big burst once audio is ready,
-
Android app consumes at LAN speed,
-
Then nothing until the next audio chunk finishes.
-
-
After a few minutes, Android has outpaced the transcoder pipeline → buffer starves → constant buffering.
-
With full transcode (video+audio), ffmpeg encodes everything together, output is steady → no buffering.
-
With Plex Web, delivery path (progressive/fMP4) smooths it out → no buffering.
-
Issue seems specific to Plex Android’s HLS pipeline when only audio is transcoded.
My questions for Plex team and community:
-
Is this a known issue on Plex for Android, where Direct Play video + audio transcode leads to bursty HLS and buffer starvation?
-
Is there a way to force progressive/fMP4 delivery instead of HLS when only audio is transcoded?
-
Would switching audio transcode format (Opus → AAC) help smooth segment production? If yes, how can this be enforced by the Plex server?
Thanks in advance. Happy to provide logs, run A/B tests, or help debug.