Skip to content
Swiftly Music Blog Discord GitHub
  1. Swiftly Player
  2. Blog

Jellyfin MKV on iPhone and Apple TV: why it fails, and how to fix it

Why Jellyfin MKV files transcode or fail on iPhone and Apple TV, which apps avoid it, and server-side fixes for playback that will not start.

By Swiftly Player11 min read

Disclosure: we build Swiftly Player, one of the clients in this article. We point out where other apps do better.

Facts about supported formats come from Apple's own technical specification pages, GitHub documentation for Swiftfin, and each app's own App Store listing or website, checked in September 2026.

TL;DR

  • Apple's own media players are built on AVPlayer, which does not open the Matroska (MKV) container at all, and does not decode DTS, DTS-HD, TrueHD or MLP audio, or ASS subtitles, regardless of the container.
  • A Jellyfin app built directly on AVPlayer therefore has to ask the server to remux or transcode most MKV files, and some combinations, like DTS or TrueHD audio, cannot be fixed by remuxing alone because AVPlayer cannot decode that audio at all.
  • Apps that ship their own playback engine instead of AVPlayer sidestep this: Swiftfin's VLC option, Infuse, Swiftly Player through VLC, VidHub and SenPlayer each bring their own decoders, so more files play without help from the server.
  • On the server, the practical fixes are: let Jellyfin remux the container when only the container is the problem, extract or convert subtitles that would otherwise force a full transcode, and accept that some audio tracks need converting to AC-3 or AAC if you want to stay on an AVPlayer-based app.
  • Or use a client that plays MKV, DTS and TrueHD directly, which removes the problem rather than working around it.

What Apple's own players actually support

iPhone and iPad and Apple TV all play video through AVPlayer, the media framework Apple ships in AVFoundation. Any app that has not built or licensed its own decoding stack is, in practice, built on AVPlayer, including Safari, the TV app, and most third-party video apps that do not advertise a specific engine.

Apple's own technical specification pages list what that framework plays. The Apple TV 4K page lists video support as "SDR video with AVC/HEVC (Main/Main 10 profile) up to 2160p, 60 fps," "Dolby Vision (Profile 5)," and "HDR10+/HDR10/HLG with HEVC," and audio support as "AC-3 (Dolby Digital 5.1), E-AC-3 (Dolby Digital Plus 7.1 surround sound), and Dolby Atmos," alongside AAC, ALAC, FLAC and a few others — with no DTS of any kind listed (apple.com, Apple TV 4K specifications). The iPhone 16 technical specifications page lists video playback support as "HEVC, H.264, and AV1," and audio playback as "AAC, APAC, MP3, Apple Lossless, FLAC, Dolby Digital, Dolby Digital Plus, and Dolby Atmos" (support.apple.com, iPhone 16).

Two things stand out. First, Matroska (MKV) is not on either list — Apple names containers like MP4/M4V/MOV elsewhere, never MKV. Second, DTS and Dolby TrueHD are absent from both, even though AC-3, E-AC-3 and Atmos are explicitly supported. This is not a gap in the documentation; it is a licensing and engineering choice Apple has made for its own player, and every app built on top of AVPlayer inherits it.

Why MKV specifically causes trouble

MKV (Matroska) is a container, not a codec: it can hold almost any combination of video, audio and subtitle streams. That flexibility is exactly the problem for AVPlayer, which never learned to open the container at all, independent of what is inside it.

This means a file that would otherwise play perfectly — H.264 or HEVC video, AAC audio — can still fail on an AVPlayer-based app for no reason other than the .mkv extension. The video and audio codecs are already fine; only the wrapper is not understood. This is the case remuxing solves: repackage the same streams into an MP4 or MOV container without touching a single frame, and AVPlayer opens it.

HEVC in MKV hits this exact case most often, since HEVC rips and re-encodes are commonly distributed in MKV. The codec itself is supported (subject to the device generation), so once the container is swapped for MP4, playback usually works.

Audio that a remux alone will not fix

Remuxing only changes the container. If the audio track itself is a codec AVPlayer cannot decode, putting it in an MP4 does nothing, because the problem was never the container.

DTS and DTS-HD are the most common case: neither is in Apple's published audio format lists for iPhone or Apple TV. Dolby TrueHD and MLP (the codec inside Blu-ray lossless audio, and DVD-Audio) are the other recurring case. GitHub's documentation for Swiftfin, the Jellyfin project's own iOS/tvOS app, states this directly in its player comparison: for the Native player (its AVPlayer-based option), DTS, DTS-HD, MLP and TrueHD are all marked unsupported; even Swiftfin's separate VLC-based player option in that same comparison lists DTS-HD, MLP and TrueHD as unsupported there too (github.com, Swiftfin players.md).

For these tracks, the only fixes that keep you on an AVPlayer-based app are transcoding the audio to AC-3, E-AC-3 or AAC (which Jellyfin's server can do while leaving the video untouched), or switching to a client whose own player decodes the original codec. See Jellyfin, Atmos and TrueHD passthrough for how this plays out on receivers and other platforms, not just Apple's.

There is a second reason DTS matters even if your app could somehow pass it through: AirPlay to an Apple TV does not accept DTS either. If you route audio to an Apple TV over AirPlay, the same limitation applies at the receiving end, independent of which app sent it.

PGS, ASS subtitles and AV1

Subtitles split the same way containers do: text formats (SRT, ASS/SSA) are drawn by the player, picture formats (PGS from Blu-ray, VobSub from DVD) are bitmap images the player either draws itself or asks the server to burn into the video. Jellyfin subtitles, explained covers naming, flags and the OpenSubtitles plugin in full; Jellyfin's own codec documentation describes the text-versus-picture distinction and calls burning subtitles into the video "the most intensive" playback path there is (jellyfin.org, Codec support). Swiftfin's player comparison lists ASS as VLC-only, with the Native (AVPlayer) player needing server-side encoding for PGS (github.com, Swiftfin players.md) — AVPlayer draws WebVTT and a few embedded formats itself, but not ASS, and not PGS without help.

AV1 is a newer complication. Apple added AV1 decoding in hardware starting with the A17 Pro and M3 generation of chips; Swiftfin's documentation notes AV1 needs "A17 Pro, M3, or newer for acceptable performance" (github.com, Swiftfin players.md), which matches AV1 appearing on Apple's current iPhone 16 format list. Older devices, or apps that have not added AV1 decoding of their own, will need the server to transcode AV1 sources regardless of container.

Clients that bring their own engine instead of AVPlayer

Several iOS and tvOS Jellyfin clients avoid these limits by shipping a decoder that is not AVPlayer, at the cost of losing a few AVPlayer-only features like Picture in Picture in some configurations.

AppEngineMKVDTS / TrueHDASS / PGS subtitlesSource
Swiftfin (VLC option)VLCYesDTS yes; DTS-HD, MLP, TrueHD unsupportedASS embedded in MKV: yes. External ASS: server-side encodingplayers.md
Swiftfin (Native option)AVPlayerNoUnsupportedASS unsupported; PGS needs server-side encodingplayers.md
InfuseIts own engineYesDTS, DTS-HD MA and Dolby TrueHD listed as supportedASS/SSA and PGS listed as supportedfirecore.com
Swiftly PlayerVLCYesYesYes, drawn by VLC on the devicePlays through VLC as Direct Play or Direct Stream
VidHubIts own player, not AVPlayer's container listYes, listed by name in its App Store descriptionNot stated on the App Store listingSRT, SSA and SUB listedApp Store
SenPlayerIts own "3.0 Playback Engine," per its App Store listingYes, listed by nameNot stated in detail; Dolby Atmos native support is statedEmbedded and external subtitle files, plus online searchApp Store

Not every app documents every codec down to the same level of detail as Swiftfin's GitHub-hosted comparison, which is the most precise public source on this topic. Where an App Store page does not spell out a specific codec, the table says so rather than guessing. Swiftfin alternatives and free Infuse alternatives go deeper on downloads, Skip Intro and pricing across these same apps.

Fixing it on the server

  1. Let Jellyfin remux instead of transcode when it can. If your file's video and audio codecs are already supported and only the MKV container is the issue, Jellyfin's own playback ladder picks Direct Stream (repackage the container, leave the streams alone) automatically once the client's device profile says it accepts the target container. This costs far less server load than a full transcode.
  2. Deal with subtitles before they force a transcode. External SRT or ASS files next to your MKV, correctly flagged in the file name, let an AVPlayer-based app skip burn-in for anything it can draw itself. For PGS tracks that an AVPlayer app cannot draw, either accept the burn-in, or switch that one file's playback to a client with its own subtitle renderer, such as the ones in the table above.
  3. Convert audio you know will not decode. If a file is DTS or TrueHD and you mainly watch on an AVPlayer-based app, transcoding just the audio track to AC-3 or AAC ahead of time (or letting Jellyfin transcode it on the fly) avoids a failed playback without touching the video at all.
  4. Or pick a client that already plays the file as it is. For a library with a lot of MKV, DTS and TrueHD, an app with its own engine avoids steps 1 through 3 entirely, at the cost of some AVPlayer-only platform integrations in a few of those apps.

FAQ

Why won't my MKV file play on iPhone?

Most likely because the app you are using is built on Apple's AVPlayer, which does not open the Matroska container at all. Jellyfin's server can usually remux the same video and audio into an MP4-compatible stream automatically; if the audio codec itself (DTS or TrueHD, for example) is also unsupported, remuxing is not enough and the audio needs converting too.

Does Jellyfin support MKV playback on Apple TV?

The server can send MKV content to any client whose device profile says it accepts the container, or remux it into one that does. Whether it plays without conversion on your Apple TV depends on which Jellyfin app you use: apps built on AVPlayer generally need the container remuxed, while apps that ship VLC or their own engine, such as Swiftly Player or Infuse, can often play the original MKV file directly.

Why does Jellyfin say "not playing" or fail to start on iPhone?

Check the active session in your Jellyfin dashboard for the container, video codec, audio codec and subtitle format involved. A failure to even start playback, rather than a slow transcode, often points to an audio codec (DTS, TrueHD) or subtitle format (PGS without burn-in support) the app's player cannot decode at all, not just a container mismatch.

Can AirPlay send DTS audio to an Apple TV?

No. Apple TV's published audio format support lists AC-3 (Dolby Digital), E-AC-3 (Dolby Digital Plus) and Dolby Atmos, with no DTS variant, so DTS content needs converting to one of those before it reaches the Apple TV regardless of which app sent it.

Which Jellyfin app plays MKV without transcoding on iOS?

Any app using a decoder other than AVPlayer for the container, such as Swiftfin's VLC player option, Infuse, Swiftly Player, VidHub or SenPlayer. How much further that extends to the audio and subtitle tracks inside the MKV depends on the app; check the comparison table above for what each one documents.

Is HEVC in MKV a problem on Apple devices?

The codec itself plays fine on recent Apple hardware. The MKV container is the actual issue for AVPlayer-based apps: once the same HEVC and audio streams are repackaged into MP4 or MOV, or opened by a client with its own container support, playback works the same as any other HEVC file.

Summary

MKV playback problems on iPhone and Apple TV almost always trace back to AVPlayer, the framework behind Apple's own player and most apps that do not advertise otherwise: it does not open Matroska, does not decode DTS, DTS-HD, TrueHD or MLP, and does not draw ASS subtitles or PGS without help. A remux fixes the container-only cases; DTS and TrueHD audio need converting, not just repackaging. Apps with their own engine — Swiftfin's VLC option, Infuse, Swiftly Player, VidHub and SenPlayer among them — sidestep the whole category by not relying on AVPlayer for the container or the audio codec in the first place.

Sources

Related articles

All articles