PrismCore

Swift balíček · vibecoded

PrismCore

Nativní přehrávací engine Aetheru — FFmpeg demuxuje, Apple přehrává

PrismCore vezme jakýkoli kontejner, který libavformat umí číst — MKV, MPEG-TS, AVI — za běhu ho remuxuje do HLS-fMP4, servíruje z loopback serveru na 127.0.0.1 a obyčejnému AVPlayeru předá URL playlistu. Apple stack pak dělá to, co na svých platformách umí jen on: hardwarový dekód, Dolby Atmos passthrough, Dolby Vision, Match Content.

  • Swift 6
  • iOS 16+ · tvOS 17+ · macOS 14+ · visionOS 1+
  • Výchozí engine Aetheru
  • LGPL-2.1

Proč jsem ho postavil

Dva enginy Aetheru si přehrávání dělily napůl: AVPlayer uměl Atmos, Dolby Vision i hardwarový dekód, ale jen Apple kontejnery; libmpv přehrál všechno, ale kreslil si vlastní snímky a audio dekódoval do PCM, takže Atmos i DV u něj končily. PrismCore tu mezeru zavřel a Aether po něm sahá jako první. libmpv zůstává jako záloha pro to, co PrismCore zatím nezvládne — a skončí, až ho PrismCore plně nahradí.

Kam patří

  • Aether — vychází s ním a na všech platformách je zapnutý ve výchozím stavu
  • Jakákoli Swift appka, která chce přehrávat MKV nebo MPEG-TS obyčejným AVPlayerem
  • Každý, komu záleží na tom, aby Atmos a Dolby Vision přežily cestu na obrazovku

Co umí

Remux, ne transkód

Video i audio se tak, jak je demuxer čte, jen kopírují do segmentů HLS-fMP4 — žádné překódování, žádná ztráta kvality, žádná zátěž CPU. Dekóduje VideoToolbox v hardwaru, jako by soubor byl od začátku v nativním formátu Apple.

Dolby Atmos passthrough

EAC3+JOC se kopíruje netknuté, nikdy se nedekóduje do PCM — a PrismCore záplatuje dec3 box, který FFmpeg při stream copy zahodí: jediný signál, kvůli kterému AVFoundation zvolí Dolby cestu místo obyčejného DD+.

Dolby Vision, poctivě signalizovaný

Profile 5 dostane svůj dvh1 sample entry, Profile 7 se přes libdovi přepíše na jednovrstvý 8.1 a master playlist tvrdí jen to, co aktuální displej opravdu umí — s muxed fallbackem pro případ, že AVPlayer master i tak odmítne.

Každá stopa přežije

Každá audio stopa se stane HLS alternate rendition se svým názvem, jazykem i počtem kanálů, takže menu stop v AVKitu prostě funguje. Textové titulky se převádějí na segmentované WebVTT renditions, které přežijí PiP i AirPlay, a externí SRT/VTT se přidají stejnou cestou. Projdou i PGS a VOBSUB: nesou jen bitmapy, takže je přečte OCR z Vision přímo v zařízení — nic se nikam neposílá — a stanou se z nich taky obyčejné renditions.

Přetáčení jako u lokálního souboru

Mapa segmentů zarovnaná na klíčové snímky je hotová dřív, než projde první paket. Když přetočíš mimo už vyrobený úsek, demuxer skočí na správný klíčový snímek. Cache s pevným limitem v bajtech hlídá místo na disku, ne možnost přetáčet — vyhozené segmenty se prostě vyrobí znovu.

Softwarová cesta pro zbytek

Kodeky, které AVPlayer nedekóduje vůbec — VP9, MPEG-2, VC-1 — se dekódují přes libavcodec do AVSampleBufferDisplayLayer, zero-copy tam, kde má VideoToolbox hardwarový dekodér. AV1 se ptá skutečného křemíku, ne jména čipu. Ověřeně prokládané zdroje opouštějí nativní cestu, aby si je vzal bwdif.

Služba, ne přehrávač

PrismCore je záměrně úzký: žádné view, žádný transport, žádný publikovaný stav. Session vezme URL a vrátí URL playlistu; existující AVPlayer infrastruktura hosta zůstává u kormidla. Jeden vstupní bod — PrismCoreEngine.open — zdroj prozkoumá a vrátí remux session, nebo softwarovou pipeline, už nastartovanou.

Postaveno na

  • Swift 6 (actory)
  • FFmpeg (přes MPVKit)
  • HLS-fMP4
  • AVPlayer & AVFoundation
  • libdovi
  • Network.framework
  • SwiftPM
  • LGPL-2.1

Kde to je

Je venku. V srpnu 2026 se PrismCore přesunul z vývojářské sekce Aetheru do Nastavení ▸ Přehrávání a na všech platformách je zapnutý ve výchozím stavu — nová instalace ho má, aniž bys cokoli nastavoval. Obě hlavní tvrzení, která žádná testovací data dokázat nemohla, jsou ověřená na skutečných zařízeních: Dolby Atmos dorazí přes HDMI do receiveru a Apple TV se přepne do Dolby Vision hned napoprvé. Když přepnutí odmítne nastavení Match Content na televizi, druhý pokus zachová všechny zvukové stopy i titulky. Funguje i převod zvuku, takže TrueHD a DTS dorazí jako EAC3 a nezploští se.

Na roadmapě

  • Vyřadit Prism — libmpv je pořád záloha pro zdroje, které PrismCore nezvládne, a odejde, až ho PrismCore plně nahradí
  • Zavřít poslední mezery, kvůli kterým je ta záloha ještě potřeba
  • Synchronizace obrazu a zvuku v softwarové cestě, ověřená na zařízení pod skutečnou zátěží, ne na náhražkách rendereru

PrismCore je vibecodovaný — navrhl a postavil jsem ho s AI po ruce, stejně jako pomáhám týmům zapojit AI do každodenní práce.