PrismCore / Getting started
Platform requirements
Minimum OS versions, toolchain, dependencies and the FFmpeg build capabilities PrismCore 3.5.4 depends on.
Operating systems
| Platform | Minimum |
|---|---|
| iOS / iPadOS | 16.0 |
| tvOS | 17.0 |
| macOS | 14.0 |
| visionOS | 1.0 |
These are the package's declared deployment targets. A few APIs exist on one platform only — DisplayCriteriaController, which drives the HDMI display handshake, is tvOS only — and the API reference marks every such symbol.
Toolchain
- Swift tools 6.0 (
// swift-tools-version: 6.0). The PrismCore targets themselves compile in the Swift 5 language mode; your app can use either mode. - The test suite runs on Swift Testing. Some tests need Xcode's toolchain rather than the Command Line Tools — see Testing.
Dependencies
| Package | Requirement | Provides |
|---|---|---|
| MPVKit | .upToNextMinor(from: "1.0.0") | FFmpeg (libavformat, libavcodec, libavutil, libswresample, libswscale) as prebuilt dynamic xcframeworks, plus libdovi |
FFmpeg is linked dynamically. No FFmpeg source is redistributed in the PrismCore repository; the binaries and their build recipes live with MPVKit.
Capabilities that depend on the FFmpeg build
Half of what the engine decides is a question about the build rather than the media. FFmpegBuild.capabilities and FFmpegBuild.summary report what the loaded build can do:
| Capability | Without it |
|---|---|
eac3 encoder | The audio bridge targets AAC instead of E-AC-3. Bridged tracks still play through AVPlayer, but as AAC (up to 5.1) — no bitstream passthrough to an AV receiver. Stock MPVKit ships E-AC-3 decoders only. |
Any bridge encoder (eac3 or aac) | A source whose audio all needs bridging goes to the software path, which decodes the audio itself — provided the build has a software decoder for its video. |
| AV1 decoder | AV1 without a hardware decoder cannot use the software path. |
pan / abuffer / abuffersink filters | No dialogue-boost renditions (PrismCoreSession.isDialogueBoostAvailable). |
GPU deinterlacer (yadif_videotoolbox) | Interlaced video on the software path is deinterlaced on the CPU (bwdif), and hardware decode is given up for it. |
Hardware video decode is asked of the device, not inferred: AV1 rides the native path only where VTIsHardwareDecodeSupported says the device has an AV1 decoder.
Sandbox and networking
- macOS App Sandbox: binding the loopback server requires
com.apple.security.network.server, even for127.0.0.1. - Local network: only the opt-in AirPlay mode (
reachability: .localNetworkUnencryptedForAirPlay) serves beyond loopback, and only over IPv4. - Remote sources are read by FFmpeg's own HTTP stack by default, or by PrismCore's coordinated HTTP reader when you opt in.