Dolby Vision is very broken

DV files hang the entire app and I need to exit out via the main Xbox button the Controller, choose Plex, manage, close.

Every DV file, every time.

they play just fine on roku and Android TV.

Server Version#:latest
Player Version#:latest

Probably depends on the DV profile or local network speed. Xbox does not support DV discs, so it does not support DV profile 7. DV profile 8 should fall back to HDR (but won’t playback in DV), I have several files that do that. I do not have any profile 5 files, which is the streaming app profile. It’s not a plex issue, the hardware needs to support it.

My TV supports it, my receiver supports it, and the Xbox supports it - and since I mentioned they play fine on other devices, we can deduce my network is fine (but to be clear, I’m running gig ethernet throughout the house)

So, what remains is that if there is a DV profile that is unsupported on Xbox, then the Plex Xbox profile needs to deny it, and transcode to a supported streaming file type…. not just completely black screen and hang.

Do you have Dolby Vision enabled on the xbox TV menu??

Yes. Xbox games play in Dolby Vision mode just fine. (For example, No man’s sky).

I don’t have much to add other than I’ve been experiencing the same with DoVi videos. What I do as a workaround is set it to play at a lower quality setting so it forces a transcode instead of the direct play, and it will play without issue, but that ends up affecting picture quality (and sometimes the colors) of course.

I’m also on a Xbox Series X, and it is not software version dependent as I’ve been chasing this for at least a year now. My server is on Windows running 1.42.1.10060 right now but I’ll have it update to 1.42.2.10156 tonight, but it is not going to help either. Like OP it is only my Xbox having issues.

1 Like

Are we the only two people with issues playing videos on xbox? how can I narrow this down? I’ll build a tdarr filter and rerun my files to nuke whatever profile is bad, but…. how do I figure it out?

Nope you’re not alone, seems like certains video with hevc main 10 make the xbox app completely frozen. I created a thread also on this problem but i’ve never had response from plex…

1 Like

how did you figure out the extradata not empty… thing?

Lot of tests : (i used AI to summarize this)

The investigation began because I was comparing two HEVC Main 10 files: one that caused the Xbox Plex app to crash (sample file in my thread) and another one that played perfectly (in hevc main 10 too). Since both files used the exact same codec and settings (HEVC Main 10), I knew the difference had to be a subtle structural error within the file container, which is why I began digging with ffprobe and the binary tool xxd.

I used a combination of command-line tools to target the video stream’s private data headers, known as the Extradata.

:magnifying_glass_tilted_left: Diagnosis: Finding the Extradata Corruption

The core problem wasn’t visible in standard video properties; it was hidden in the private structural data used by the decoder.

1. I Identified the Critical Parameter (Extradata Size)

I first used the command-line tool ffprobe to examine the Extradata Size of the video stream. This value tells me how many bytes are reserved for the codec’s configuration (VPS, SPS, PPS for HEVC), which is essential for hardware decoders to start working.

The specific command I used to retrieve this value was:

ffprobe -v error -select_streams v:0 -show_entries stream=extradata_size -of default=noprint_wrappers=1:nokey=0 input_file.mkv

File Status Extradata Size Interpretation
Working Files (OK) 111 or 2470 bytes Normal size, indicating the presence of configuration data.
Crashing Files (KO) Exactly 23 bytes Abnormal size, indicating that the essential configuration data is missing or truncated.

2. My Binary Proof (xxd) and Output Examples

I then used the hexadecimal dump tool xxd to inspect the raw file headers, looking at the Extradata area (around offset 0x160) to get the binary proof:

File Status Extradata Size Sample xxd Output (Critical Area) Interpretation
Working (OK) 2470 bytes 00000160: 4d50 4547 482f 4953 4f2f 4845 5643 8381 V_MPEGH/ISO/HEVC The header is correct, followed by dense, valid configuration bytes (VPS/SPS/PPS).
Crashing (KO) 23 bytes 00000160: 0000 0000 0000 0000 0000 0000 0000 0000 … The critical configuration area is filled with zero bytes (00), meaning the essential configuration data is physically missing from the file.

When the Xbox hardware decoder attempted to initialize using these 23 bytes of missing/zeroed data, the process failed critically, leading to the application crash.


:hammer_and_wrench: The Solution: Forcing a Clean Stream

My initial logical fix (simple remux using mkvmerge) failed because the HEVC stream itself was fundamentally corrupted. The defect wasn’t just a container problem.

The definitive solution required a full video re-encode (transcoding) using ffmpeg.

1. The Working Fix (Re-encoding)

The command that solved the issue was:

ffmpeg -i "input_file.mkv" -c:v hevc -c:a copy -c:s copy "output_fixed.mkv"

2. Why this Worked

The -c:v hevc flag forces FFmpeg to decompress the old, faulty video stream and immediately re-encode it. This process creates a brand new, structurally perfect HEVC stream which automatically generates a correct and complete Extradata, resolving the crash.


:warning: Important Note (The Xbox Anomaly)

This re-encoding is a workaround for a specific file defect caused by a faulty initial encoding/muxing process.

The crash only occurs on the Xbox, while other devices like PS5, Smart TVs, Android/Apple TV, etc., handle the playback without issue. I cannot definitively say why the Xbox is unique in this failure, but it strongly suggests that:

  1. The Xbox’s hardware decoder is strictly configured to use the Extradata header and does not fall back to scanning the video stream for configuration data when the header is missing.

  2. The software stacks on other devices are more robust and can compensate for the missing header information in the container, thus avoiding a critical failure.

:wrapped_gift: Bonus Script: Automated Corrupt File Checker

# NOTE:
# Files flagged by this script are not necessarily corrupted MKV containers.
# They have an unusually small HEVC extradata size (≤ 40 bytes), which often means
# the VPS/SPS/PPS headers required for hardware decoders (like the Xbox Plex app)
# are missing or incomplete. Such files may crash or freeze
find . -type f -iname "*.mkv" -print0 | while IFS= read -r -d $'\0' file; do
    # Retrieve the Extradata size for the first video stream
    extradata_size=$(ffprobe -v error -select_streams v:0 -show_entries stream=extradata_size -of default=noprint_wrappers=1:nokey=1 "$file" 2>/dev/null)

    # Check if the size is numeric and if it is less than or equal to 50
    if [[ "$extradata_size" =~ ^[0-9]+$ ]] && (( extradata_size <= 40 )); then
        echo "🚨 [CORRUPTED] Extradata Size: ${extradata_size} bytes -> ${file}"
    else
        # Optional: Display OK files for a complete check
        # echo "āœ… [OK] Extradata Size: ${extradata_size} bytes -> ${file}"
        :
    fi
done

@ChuckPa @Chattykinson @Atomatth @McWanke : I believe I’ve provided all the technical details necessary to diagnose this specific issue. Please, I need your expertise to understand and correct the underlying problem.

2 Likes

Thank you for the deep dive @raiiyzen77 . I’ll copy it over to a report

1 Like

@raiiyzen77

I just chatted with Chris.

He was aware of the problem.

He’s already completely reworked DV support.

He recommends trying PMS 1.43.0

PS: Please remember, Plex is not licensed to transcode Dolby Vision content. We can, at most, DROP DV metadata from transcoded video streams.

I had the Xbox player completely freeze up last night again. I’m attaching the logs from a clean reproduction of the issue I did this morning.

I cannot try 1.43 because it is only available in beta for Plex Pass, I’m on 1.42.

deleted log(494.2 KB)

@jeradc

That’s unfortunate.

  1. HEVC transcoding is done in hardware.
  2. Hardware transcoding requires a Plex Pass
  3. Given what’s being worked on for the next release, it might be a bit before 1.43.0 goes Public

Have you considered getting a PlexPass for just one month?

What do I need to transcode? AFAIK my whole pipeline supports all these features and it should Direct Play - the TV, Xbox, Receiver. The only limitations are for Atmos getting downgraded to 6 channel and audio remuxing doesnt appear to be taxing the system from what I’ve seen.

I know xbox is really restrictive.

I can’t otherwise speak to using it / what it can do.

Your logs are only INFO mode. I can’t see what really happened.
You say DirectPlay but DEBUG logs will tell us what happened and why

Would you mind recreating and then attaching the DEBUG mode server logs so I can see what’s happening?

I set debug, stopped plex, started plex, recreated issue, turned off debug.

I’ll try again, but worry I’ll be hitting the definition of madness by doing so.

Madness?

You’d be among friends.

:zany_face:

1 Like

Ok, the debug log thing was my fault, had previously done this to enable logging:

Settings → Plex Web → Debug → Debug Level → From the dropdown, choose ā€œenabledā€ → Choose Save Settings

But, I found that was wrong and did this instead this time:

Settings → General → Check " Enable Plex Media Server debug logging " → Choose Save Settings

Then, I followed this article to enable Xbox logging to my server:

https://support.plex.tv/articles/206239048-xbox-one-logs/

… which told me to read this article:

https://support.plex.tv/articles/200250417-plex-media-server-log-files/

… which told me to read this article:

https://support.plex.tv/articles/201643703-reporting-issues-with-plex-media-server/

Those documents are convoluted, but I think I got there in the end. Here are the attached logs now.

Plex Media Server Logs_2025-11-11_13-29-27.zip (188.1 KB)

Thanks for that log.

It perfectly shows what I was hoping to see.

The file you gave it was deemed DirectPlay

Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [MDE] Application decision, directPlay: true, directStreamVideo: true, directStreamAudio: true
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq]   videoStream: {
  "id": 120513,
  "streamType": 1,
  "default": true,
  "codec": "hevc",
  "index": 0,
  "bitrate": 14910,
  "DOVIBLCompatID": 1,
  "DOVIBLPresent": true,
  "DOVIELPresent": false,
  "DOVILevel": 6,
  "DOVIPresent": true,
  "DOVIProfile": 8,
  "DOVIRPUPresent": true,
  "DOVIVersion": "1.0",
  "bitDepth": 10,
  "chromaLocation": "topleft",
  "chromaSubsampling": "4:2:0",
  "codedHeight": 2160,
  "codedWidth": 3840,
  "colorPrimaries": "bt2020",
  "colorRange": "tv",
  "colorSpace": "bt2020nc",
  "colorTrc": "smpte2084",
  "frameRate": 23.976,
  "height": 2160,
  "level": 153,
  "profile": "main 10",
  "refFrames": 1,
  "width": 3840,
  "displayTitle": "4K DoVi/HDR10 (HEVC Main 10)",
  "extendedDisplayTitle": "4K DoVi/HDR10 (HEVC Main 10)"
}
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq]   audioStream: {
  "id": 120514,
  "streamType": 2,
  "selected": true,
  "codec": "eac3",
  "index": 1,
  "channels": 6,
  "bitrate": 253,
  "language": "English",
  "languageTag": "en",
  "languageCode": "eng",
  "audioChannelLayout": "5.1(side)",
  "samplingRate": 48000,
  "displayTitle": "English (EAC3 5.1)",
  "extendedDisplayTitle": "English (EAC3 5.1)"
}
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq]   subtitleStream: none
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [MDE] Server decision, directPlay: true, directStreamVideo: true, directStreamAudio: true
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq]   reason: Direct play OK.
Nov 11, 2025 13:27:07.849 [23161822841656] DEBUG - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] Setting up player for playback
Nov 11, 2025 13:27:07.849 [23161822841656] DEBUG - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] Creating player
Nov 11, 2025 13:27:07.849 [23161822841656] DEBUG - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] Created player
Nov 11, 2025 13:27:07.849 [23161822841656] DEBUG - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] Set player
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [Xbox] setDisplayMode: Setting new display mode
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [Xbox] Resolution: 3840x2160
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [Xbox] Refresh Rate: 23.976023976023977
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [Xbox] Bit Depth: 30
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [Xbox] HDR enabled: true
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [Xbox] Dolby Vision enabled: false
Nov 11, 2025 13:27:07.849 [23161822841656] DEBUG - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] Checking for Ad
Nov 11, 2025 13:27:07.849 [23161822841656] DEBUG - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] Finished checking for Ad
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] playback state changed to: buffering
Nov 11, 2025 13:27:07.849 [23161822841656] DEBUG - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] Opening playback
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [Xbox] setDisplayMode: New display mode set
Nov 11, 2025 13:27:07.849 [23161822841656] WARN - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] Could not open subtitle connection: no playable subtitles found!
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] playback state changed to: playing
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] Refreshing playqueue, current item: Agent Billy Pace
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] [PlaybackSessionController] playback state changed to: buffering
Nov 11, 2025 13:27:07.849 [23161822841656] INFO - [Req#1f1] [Plex for Xbox] [jeradc:gsevedxu1mk9h23hc62uycqq] Refreshed/modified playqueue, current item: 118367

Near the bottom, you see ā€˜buffering’. This is the file being sent to the xbox so it can fill its queue and start playback.

I’m going to take your logs and add it to the issue submitted by BigWheel.

1 Like