Skip to content
AetherEngine

AetherEngine

A media player engine for Apple platforms. FFmpeg demuxes, VideoToolbox decodes, AVPlayer handles Dolby Atmos.
Latest 6.7.0

Apps shipping AetherEngine today:

Shipping something on AetherEngine? Submit it to get listed here and in the README.

Real HDR & Dolby Vision

HDR10, HDR10+ (per-frame ST 2094-40), Dolby Vision (P5, P7 as single-layer 8.1, P8.1, P8.4, AV1 P10.x), and HLG, with full metadata and automatic Match Content.

Dolby Atmos

EAC3+JOC stream-copied on every route (HDMI MAT 2.0, AirPods spatial, Bluetooth downmix), plus 5.1 / 7.1 surround with correct channel layout.

Broad codec coverage

H.264, HEVC, and AV1 via VideoToolbox; AV1 without hardware, VP9, MPEG-2, and VC-1 via the software dav1d path. MKV, MP4, WebM, MPEG-TS, AVI, and more.

Audio-only path

A lean pipeline with no video machinery and system Now-Playing on tvOS and iOS, driven by a single LoadOptions flag.

Live TV & DVR

Unbounded live with optional timeshift, and direct HLS ingest with AES-128 clear-key and SSAI ad-pod handling.

You ship the UI

No AVPlayerViewController, no opinionated controls, no analytics. Bind the view, call play(), read the published state.

On Apple platforms the real choice is between AVPlayer, with deep OS integration but only the formats Apple ships, and a VLC- or mpv-derived engine, which plays almost anything but renders its own frames and bypasses the system’s Dolby Vision, Atmos, and HDR handling. AetherEngine is built to give you both: FFmpeg’s format breadth layered on top of VideoToolbox and AVPlayer, so Dolby Vision, Atmos, and Match Content keep working. KSPlayer is the closest analog, it reaches the same outcome through the same AVPlayer route, but it ships as a full player with its own UI and gates MKV, Dolby Vision, and Atmos behind a paid LGPL tier (the free build is GPL); AetherEngine is an embeddable engine you drive from your own SwiftUI, with that codec and HDR breadth in the open-source core.

AetherEngineKSPlayerAVPlayerVLCKitlibmpv
ApproachEmbeddable engine, Apple-onlyFull player with bundled UI, FFmpeg + AVPlayer, Apple-onlyApple’s built-in playerlibVLC wrapped for Applelibmpv, cross-platform
Container & codec breadthWide, FFmpeg demuxWide, FFmpeg demuxNarrow, Apple’s setWideWide
Hardware decodeVideoToolbox, dav1d SW fallbackVideoToolbox, FFmpeg SW fallbackVideoToolboxVideoToolbox plus softwareVideoToolbox plus software
Dolby VisionP5, P7 as 8.1, P8.1, P8.4, AV1 P10.x, real display switchP5, P8 via AVPlayer, paid LGPL tierP5 and P8.1 onlyTone-maps, no DV displayTone-maps, no DV display
Dolby AtmosEAC3+JOC stream-copied (HDMI MAT, spatial)EAC3+JOC via AVPlayer, paid LGPL tierEAC3+JOC passthroughDecodes to PCM, no object passthroughNo Atmos passthrough on Apple
HDR on tvOSNative Match Content switchNative Match Content on AVPlayer path, else Metal tone-mapNative Match ContentSoftware tone-mappingSoftware tone-mapping
Rendering & UIOS-native, you ship SwiftUIOwn Metal renderer, bundled controlsOS-native, you ship UIOwn renderer, bundled controlsOwn renderer, bundled OSC
Apple TV / App StoreYes, LGPL plus store exceptionFree tier GPL, DV / Atmos / MKV need paid LGPLYesYes, LGPLNot practical, GPL, no tvOS

The engine leans on the platform where the platform is best (hardware decode, Dolby Vision display, Atmos passthrough) and only falls back to its own software path (dav1d, libavcodec) for the formats VideoToolbox cannot handle.

AetherEngine is the engine, not an app. If you are here to actually watch something, Sodalite is the native Apple TV client for Jellyfin built on top of it. This site is for developers integrating the engine.

Read the introduction to get started.