Zum Inhalt

apple/PhysarumApp/Sources/TV/TopShelfHero.swift

import Foundation

/// The hosted Top Shelf hero asset (served from the jkaindl.de Hetzner webspace — a direct,
/// DNS-only static host with correct content-type + byte-range support that tvOS streaming
/// needs; the Codeberg Pages CI was an unreliable path). Pure value type — no TVServices — so
/// it's shared by the app + the Top Shelf extension and is host-testable. The TVServices
/// mapping lives in TopShelfProvider (tvOS-only).
///
/// videoURL points at the MULTIVARIANT (master) HLS playlist — not a bare media playlist. tvOS
/// Top Shelf pre-flights the preview through AVFoundation, which needs the CODECS/RESOLUTION/
/// FRAME-RATE that only a master playlist's EXT-X-STREAM-INF carries; a bare media playlist (or a
/// progressive .mp4) silently falls back to the poster. master.m3u8 -> stream.m3u8 (VOD) -> seg_*.ts
/// (H.264 High@4.0 + AAC-LC), built by scripts/build-topshelf-hls.sh.
struct TopShelfHero {
    let identifier: String
    let videoURL: URL
    let posterURL: URL

    static let shared = TopShelfHero(
        identifier: "physarum-hero",
        videoURL: URL(string: "https://jkaindl.de/physarum/topshelf/hls/master.m3u8")!,
        posterURL: URL(string: "https://jkaindl.de/physarum/topshelf/poster.png")!
    )
}