Legt das Fundament für den Plex-Client an: - XcodeGen-Projekt nach dem Muster von Onyx (com.scarriffleservices, strict concurrency, Projektdatei nicht eingecheckt) - FlixyKit mit vier Modulen: PlexKit, FlixyDesign, FlixyPlayback, FlixyDownloads. macOS steht als Plattform mit drin, damit die Logik-Tests ohne Simulator laufen. - FlixyDesign: dunkle Farb-Tokens, Schriftskala, Poster- und Querformat-Kacheln, Aufmacher-Bild. Die Akzentfarbe fließt über die Umgebung und wird per WCAG-Rechnung lesbar gehalten. - PlexKit: Kopfzeilen-Identität, Transport-Protokoll, Fehlerarten und die Medienmodelle samt nachsichtigem Decoder. - FlixyPlayback: VideoPlayerEngine-Protokoll und PlaybackDecider — die eine Funktion, an der Phase 2 das Transcoding andockt. - Ausfahrbare Seitenleiste auf dem iPhone, Split-View auf dem iPad. - 45 Tests, alle grün. VLCKit 4.0.0-a24 ist vorab geprüft: baut über SPM unter Swift 6 mit strict concurrency. Die iOS-Slice ist mit 239 MB allerdings gewichtig, deshalb bekommt sie in Phase 1 ein eigenes Target. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
36 lines
1.6 KiB
Swift
36 lines
1.6 KiB
Swift
import Foundation
|
|
|
|
/// Was AVPlayer auf diesem Gerät nativ abspielen kann.
|
|
///
|
|
/// Diese Liste ist der Grund, warum Flixy überhaupt zwei Motoren hat. iOS
|
|
/// spielt weder Matroska-Dateien noch DTS- oder TrueHD-Ton — und genau das
|
|
/// liegt in typischen Plex-Beständen. Alles, was hier nicht steht, geht an
|
|
/// VLCKit (oder ab Phase 2 an den Transcoder).
|
|
public struct DeviceCapabilities: Sendable, Equatable {
|
|
public var containers: Set<String>
|
|
public var videoCodecs: Set<String>
|
|
public var audioCodecs: Set<String>
|
|
|
|
public init(containers: Set<String>, videoCodecs: Set<String>, audioCodecs: Set<String>) {
|
|
self.containers = containers
|
|
self.videoCodecs = videoCodecs
|
|
self.audioCodecs = audioCodecs
|
|
}
|
|
|
|
/// Der Stand für iOS 26 auf allen Geräten, die diese Version tragen
|
|
/// (A12 aufwärts).
|
|
public static let avFoundation = DeviceCapabilities(
|
|
// Kein `mkv`, kein `avi`, kein `ts`. Das ist keine Auslassung, sondern
|
|
// der Kern des Problems: Matroska ist der übliche Container für
|
|
// Remuxe, und AVFoundation öffnet ihn nicht.
|
|
containers: ["mp4", "m4v", "mov", "qt"],
|
|
// AV1 fehlt bewusst: Hardware-Dekodierung gibt es erst ab A17 Pro, und
|
|
// Software-Dekodierung von 4K-AV1 bringt auch neue Geräte an die
|
|
// Grenze. VLC macht das kontrollierter.
|
|
videoCodecs: ["h264", "avc1", "hevc", "h265", "hvc1", "dvh1", "dvhe"],
|
|
// DTS, TrueHD und Vorbis fehlen — die drei Gründe, warum ein sonst
|
|
// tadelloser MP4-Film trotzdem stumm bliebe.
|
|
audioCodecs: ["aac", "mp3", "ac3", "eac3", "alac", "pcm", "lpcm"]
|
|
)
|
|
}
|