# Fahrplan Jeder Meilenstein endet mit einem Abnahmetest. Erst wenn er bestanden ist, beginnt der nächste. Termine sind offen. | | Meilenstein | Ohne neue Hardware testbar? | |---|---|---| | M0 | Grundgerüst | ja | | M1 | Bild | ja (NDI Tools / OBS als Quelle) | | M2 | Ton-Matrix | ja (MOTU M2 vorhanden) | | M3 | Szenen und Fernsteuerung | ja (MacBook + Mac mini) | | M4 | Intercom Stufe 1: Hören + PGM-Vorschau | ja (Heimnetz) | | M5 | Intercom Stufe 2: Sprechen | ja (Heimnetz, HTTPS) | | M6 | Tally | ja (ATEM vorhanden) | | M7 | Generalprobe | nein – braucht ZowieBoxen, Switches, Dante, Ui12 | ## M0 – Grundgerüst - [x] Xcode-Projekt „Musubi“, macOS 14, Universal Build (arm64 + x86_64), Bundle-ID `studio.zielke.musubi` - [x] Modulstruktur laut `02-architektur.md` - [x] NDI SDK eingebunden (Modulemap), Version wird beim Start geloggt - [x] `design/Theme.swift` übernommen, leeres Hauptfenster mit Quellenliste - [x] Swift-Testing-Target mit erstem Test für `MusubiCore` - **Abnahme:** Release-Build startet auf MacBook **und** Mac mini 2018; die Quellenliste zeigt eine NDI-Testquelle aus dem Netz. ## M1 – Bild - [ ] NDI-Empfang einer Quelle (HX3 und volles NDI) - [ ] Vollbild auf gewähltem Bildschirm, ohne Menüleiste, Mauszeiger ausgeblendet - [ ] Anzeigemodus 50 Hz setzen, wenn verfügbar - [ ] Zwei Quellen gleichzeitig auf zwei Bildschirmen (Mac mini: PGM + Multiview) - [ ] Ruhezustand blockieren, Auto-Reconnect - **Abnahme:** 4 Stunden, 2 Quellen, 2 Bildschirme auf dem Mac mini 2018 – keine sichtbaren Aussetzer, CPU-Last notiert, verlorene Frames < 0,1 %. ## M2 – Ton-Matrix - [ ] NDI-Ton einer Quelle auf beliebige Ausgangskanäle (z. B. MOTU M2 Out 2) - [ ] Reiner Audio-Empfang (ohne Video-Bandbreite) - [ ] Mikrofon-Eingang (Headset) auf Kanal (Out 1), Sprechtaste (Tastenkürzel, gedrückt halten / umschalten) - [ ] Pegelanzeige, Gain, Mute je Route - [ ] Drift-Ausgleich zwischen NDI-Takt und Interface-Takt - **Abnahme:** 4 Stunden ohne Knacksen und ohne hörbaren Versatz; Sprechtaste reagiert ohne Verzögerung. ## M3 – Szenen und Fernsteuerung - [ ] Szenen speichern, laden, exportieren (JSON) - [ ] Rolle Regie/Knoten; Knoten per Bonjour finden - [ ] Regie setzt Szene am Knoten; Knoten meldet Status zurück - [ ] Beim Start letzte Szene laden - **Abnahme:** Beide Macs neu starten – die Szene „OP-Live“ stellt sich ohne Eingriff wieder her. ## M4 – Intercom Stufe 1 - [ ] Web-Server nur auf der Klinik-Schnittstelle - [ ] QR-Code mit Adresse in der App - [ ] Handy-Seite: Name/Rolle, Talkback hören, PGM-Vorschau (WebRTC) - **Abnahme:** iPhone und Android im Heimnetz, Verzögerung der Vorschau gemessen < 0,5 s. ## M5 – Intercom Stufe 2 - [ ] HTTPS mit eigener Stammzertifizierung (Installationsanleitung fürs Handy) - [ ] Sprechtaste auf dem Handy → Ton-Matrix - [ ] Optional: TURN-Relay als Plan B konfigurierbar (`06-netzwerk.md`) - **Abnahme:** Gegensprechen iPhone ↔ Regie und Android ↔ Regie im selben Durchgang. ## M6 – Tally - [ ] ATEM-Status (PGM/Vorschau) lesen - [ ] Kamera-Eingang einer Handy-Rolle zuordnen - [ ] Handy-Rand rot (PGM) / grün (Vorschau) - **Abnahme:** Schnitt am Micro Panel färbt das richtige Handy in unter 200 ms. ## M7 – Generalprobe - [ ] Kompletter Aufbau laut `05-testplan-hardware.md` - **Abnahme:** 3 Stunden durchgehender Betrieb mit allen Geräten; OBS + DistroAV bleibt als Notlösung auf beiden Macs installiert. ## Erkenntnisse _(nach jedem Meilenstein ergänzen)_ ### M0 – Grundgerüst (bestanden 2026-10-21) - Abnahme: Release-Build auf Mac Studio (Apple Silicon, Entwicklungsrechner) und Mac mini 2018 (i5-8500B, macOS 15.7.7) gestartet; beide zeigen „NDI Test Patterns“ in der Quellenliste. Das MacBook nutzt denselben arm64-Teil und wurde nicht separat geprüft. - Xcode 27 baut weiterhin x86_64 für macOS 14. - NDI SDK 6.3.2: `libndi.dylib` ist universal und hat `@rpath/libndi.dylib` als Install-Name; Einbetten nach `Contents/Frameworks` reicht. - Hardened Runtime + Ad-hoc-Signatur → dyld lehnt die eingebettete `libndi.dylib` ab („different Team IDs“). Vorerst aus; mit echter Team-ID für die Notarisierung wieder einschalten. - Mac mini im Leerlauf mit Quellensuche: ca. 2 % CPU, ca. 52 MB RAM. - Mac mini ist per SSH erreichbar (Entfernte Anmeldung + Bildschirmfreigabe): App per `scp` verteilen, Quarantäne entfernen, Logs mit `log stream` mitlesen.