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 jeho dveří 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 nevezme — a odejde při paritě.
Kam patří
- Aether — engine, se kterým vychází, na všech platformách 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 stream-copy kopírují do HLS-fMP4 segmentů, jak je demuxer čte — žádné překódování, žádná ztráta kvality, žádné pálení CPU. Dekódování dělá VideoToolbox v hardwaru, přesně jako by soubor byl odjakživa Apple-nativní.
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í 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.
Seek jako v lokálním souboru
Segmentová mapa zarovnaná na keyframy se publikuje dřív, než projde první paket, a seek mimo vyrobené okno demuxer na požádání překotví na správný keyframe. Cache s bajtovým rozpočtem omezuje disk, ne seekovatelnost — 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 s
- Swift 6 (actory)
- FFmpeg (přes MPVKit)
- HLS-fMP4
- AVPlayer & AVFoundation
- libdovi
- Network.framework
- SwiftPM
- LGPL-2.1
Kde to je
Běží ostře. PrismCore v srpnu 2026 opustil vývojářskou sekci Aetheru a sedí v Nastavení ▸ Přehrávání, na všech platformách zapnutý ve výchozím stavu — čerstvá instalace ho dostane, aniž by se čehokoli dotkla. Obě hlavní tvrzení, která žádná fixtura dokázat nemohla, jsou ověřená na zařízení: Dolby Atmos dorazí do receiveru přes HDMI a Apple TV naskočí do Dolby Vision na první pokus, se záložním pokusem, který podrží každou zvukovou stopu i titulky, když nastavení Match Content na televizi přepnutí odmítne. Audio bridge je taky živý, takže TrueHD a DTS dorazí jako EAC3 místo toho, aby se zploštily.
Na roadmapě
- Vyřadit Prism — libmpv je pořád záloha pro zdroje, které PrismCore nevezme, a odejde až při paritě
- Zavřít poslední mezery v pokrytí, které tu zálohu drží při životě
- A/V sync softwarové cesty, prokázaný na zařízení pod skutečnou zátěží, ne proti náhradám za renderery
PrismCore je vibecoded — navržený a postavený s AI po ruce, stejně jako pomáhám týmům adoptovat AI v každodenní práci.