Bug: Plex for Apple TV - HEVC Transcode Buffers Indefinitely due to Incorrect HLS Container

Overview:
When attempting to play HEVC transcoded video content on an Apple TV 4K using the modern “Enhanced Player,” the Plex client requests a transcode from the server but provides a faulty profile override. This override forces the server to package the HLS stream into an MKV container, which is incompatible with the native tvOS player, resulting in an infinite buffering loop where playback never starts. Direct Play of existing HEVC MKV files works correctly, proving the player can handle the container, just not within an HLS stream.

Platform & Version Information:

  • Server Platform: Linux (Ubuntu)

  • Plex Media Server Version: 1.43.0.10231

  • Client Device: Apple TV 4K

  • Plex for Apple TV App Version: 8.45 (8.45.9684)

  • tvOS Version: 26.0.1

  • Source Media: AV1 video, DTS audio, in an MKV container.

Steps to Reproduce:

  1. On a Plex Media Server, have a library with video files encoded with the AV1 video codec.

  2. On an Apple TV 4K, open the Plex app (v8.45 or similar) with the “Use Enhanced Player” setting enabled.

  3. Attempt to play an AV1 video file.

  4. Observe that the server begins transcoding the file (from AV1 to HEVC).

  5. Observe that the Plex client on the Apple TV shows a loading spinner indefinitely and playback never begins.

Expected Result:
The AV1 video should be transcoded by the server to HEVC in a compatible container (mpegts for HLS), and playback should begin on the Apple TV client within a few seconds.

Actual Result:
The client buffers forever and the video never plays.


Technical Root Cause Analysis & Evidence:

This issue has been traced to a hardcoded profile that the Plex for Apple TV client sends to the server, which overrides any server-side profiles. This “augmentation data” contains an incompatible container/protocol combination.

1. The Client’s Flawed Request:
The client log clearly shows it sending a request to the server with an X-Plex-Client-Profile-Extra parameter. This parameter incorrectly specifies container=mkv for an hls protocol stream and forces the server to use it via replace=true.

From the Apple TV Client Log:

codeCode

GET /video/:/transcode/universal/decision?...&protocol=hls&...
X-Plex-Client-Profile-Extra=add-transcode-target(type=videoProfile&context=streaming&protocol=hls&container=mkv...&replace=true)

2. The Server’s Compliant Response:
The Plex Media Server correctly obeys this command. The transcode session event shows the server is creating a stream with the exact faulty parameters requested by the client.

From the Apple TV Client Log (receiving a server event):

codeCode

Event received (transcodeSession.start): {
  ...
  "videoDecision": "transcode",
  "protocol": "hls",
  "container": "mkv",
  "videoCodec": "hevc",
  ...
}

3. The Player’s Fatal Error:
The client’s internal player (MPV/FFmpeg) receives the HLS stream but cannot parse the MKV data within it. The player’s HLS demuxer expects MPEG-TS segments. When it receives MKV data instead, it fails with a fatal error, causing the endless buffer.

From the Apple TV Client Log:

codeCode

error: matroska,webm: Unknown element 1F43B675 at pos. 0x54d5d6 with length 0xecdd considered as invalid data. Last known good position 0x880e07, 87 unknown elements in a row

This error is the final point of failure. The player is trying to interpret an MKV file segment as if it were a simple transport stream, which is impossible.


Additional Findings (Using the “Old” Player):

As a test, switching off the “Enhanced Player” provides a different result.

  • Result: The AV1 video successfully transcodes and plays.

  • Problem: It transcodes to H.264, not the more efficient HEVC.

  • Reason: The server logs confirm that the old player also sends a profile override, but this one hardcodes videoCodec=h264, preventing the server from choosing HEVC.


Workarounds Attempted:
Extensive custom server-side tvOS.xml profiles were created to try and force a correct transcode target (e.g., protocol=hls, container=mpegts, codec=hevc). All attempts failed because the client’s hardcoded profile includes the replace=true parameter, causing the server to completely ignore the custom profiles.

Suggested Resolution:
The hardcoded profile within the Plex for Apple TV application needs to be corrected. When the client requests a transcode using the HLS protocol, the container parameter in the X-Plex-Client-Profile-Extra data must be changed from mkv to mpegts. This will produce a stream that is compliant with Apple’s HLS specification and playable by the underlying tvOS video player.

Thank you for your attention to this issue. The logs clearly show this is a client-side bug that cannot be fixed with server-side configuration.

20251106 183016.597 (3203) :minus: PMKApp.txt|attachment (534.7 KB)

2 Likes

Addendum - I tested this with a 4k AV1 file and that works as it should. This should be an easy fix, just have the app request mpegts for all transcodes regardless of resolution and colourspace. Could the devs please take a look!

1 Like

@BigWheel could someone in the dev team take a look at this? Should be a quick bug fix. Thanks!

Would be nice if this could get some attention.

Plex for Apple TV App Version: 8.45 (8.45.9684)

I believe this is considered basically deprecated, and effectively abandoned. The list of issues with it is fairly long and old.

All work is on the 2025.xx new-new-App. Your video issues are resolved in it.

Once they get critical functions like DD+ audio working I’m sure it’ll push out to public. ref: Videos with EAC3 7.1 audio files not playing in new iOS App - #34 by Ntn_Grts

Admirable work you did there but worth mentioning that HEVC isn’t supported in mpegts on iOS/tvOS.

fmp4 is needed to get HEVC to work properly under HLS on Apple devices.

Thanks for the clarification @ahmadm258. Based on the logs, the client isn’t requesting fmp4 or mpegts. It is explicitly forcing container=mkv inside the HLS protocol.

It seems the devs effectively have two choices to fix this:

  1. Update the client profile to request fMP4 for HLS transcodes if this is what is required.

  2. Fallback to MPEG-TS, and force a transcode to H.264.

Right now, the client is wrongly asking for MKV data inside an HLS stream.

Ok… have you verified this is still busted in the latest public build of 2025.xx that is public in ios?

There is no dev work and will be no dev work on your ancient * Plex for Apple TV App Version: 8.45 (8.45.9684)

No, I’m currently using the public release version on my Apple TV which works correctly (for the most part).

I don’t use plex on my iPhone/iPad and don’t have access to the TV beta.

I’m dreading when the new version arrives on Apple TV as it seems to have removed AVPlayer (which Plex calls “old player”)

I’ll be jumping ship to a third party player once they fully kill off AVPlayer. Or might move to Jellyfin/Swiftfin.

Might as well move now, “old” and “new” player are very limited as youve pointed out

Ancient?

I have the most recent version of the Apple TV app that is available in the App Store.

Why won’t anyone answer: Ok… have you verified this is still busted in the latest public build of 2025.xx that is public in ios?

This is reported as an Apple TV issue. Not an iOS issue. Your messages come across as quite snarky. The attitude is not warranted.

have you verified this is still busted in the latest public build of 2025.xx that is public in ios?

I‘m having similar issues as described by OP here with the tvOS version of Plex.

But I can confirm that the issue is not present in the iOS version 2025.31.1 (tested on iPad and iPhone with iOS 26.1).

But the only tvOS Plex app you can get from the App Store is still on version 8.45, which is from 29. Jan. 2025…

At least on my Apple TV 4k 3rd gen with tvOS 26.1