Android app buffers after ~1–2 minutes on LAN only when Direct Playing and audio is transcoding

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:

  1. Is this a known issue on Plex for Android, where Direct Play video + audio transcode leads to bursty HLS and buffer starvation?

  2. Is there a way to force progressive/fMP4 delivery instead of HLS when only audio is transcoded?

  3. 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.

This post might be related.

What is the specific CPU? Audio is highly dependent on a single core/Thread rating.

Network mode of docker should be HOST mode to avoid hitting whatever bandwidth limit the OS places on Bridge mode.

Thanks for the response.

I have an i5-10100

The CPU is fast enough as the speed of transcoding video and audio simultaneously is a multiple of the playback speed. The issue I’ve described above only occurs when the video is NOT transcoding and direct playing. Note, that the audio is being transcoded to the same codec in both cases and only the version with direct playing video is constantly buffering.

The docker container is not in host mode. But this isn’t an issue. iperf gets gigabit no problem. Addionally, when I select a non-TrueHD audio source such that the entire file is direct playing (audio AND video) then there is no buffering issue. Besides, with other streaming devices I can easily get multiple direct streams of that same movie simultaneously.

Consequently, the CPU is more than capable of delivering real-time audio transcodes of the audio channels and the bandwidth is more than enough for direct playing. The issue seems to be with how the Android app handles loading of the HLS transcodes specifically when audio is being transcoded and video is being direct played. Because, in that case, the video is being devivered much faster (at gigabit) and the audio is being delivered in-time (although still faster than real-time) Android can’t seem to handle processing both streams asynchronously.

I’m no expert on the technical details of how ffmpeg and Plex works under the hood. So please correct me if I’m wrong.

Also having this issue, the android app will endlessly load with the thumbnail in the middle after pressing play, and the moment I switch to lower quality audio it works fine. The Plex dash shows up with nothing, as if I am not playing anything.

A server-side solution like actually transcoding the audio would be great or having an option to force certain audio formats for certain platforms.

Edit: CPU is i7-1280p. 64gb RAM.

Just want to point out that this is still an issue (keeping the post alive). These problems make Direct Playing on Android impossible.