You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Musubi/docs/04-fahrplan.md

81 lines
4.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Fahrplan
Jeder Meilenstein endet mit einem Abnahmetest. Erst wenn er bestanden ist, beginnt der nächste. Termine sind offen.
> **Absprache 2026-10-21:** Die Reihenfolge darf nach Absprache angepasst werden. Langzeittests (z. B. M1: 4 h) laufen gesammelt am Wochenende mit einem getaggten Build (`m1-candidate`); die Entwicklung von M2 beginnt vorher.
| | 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) – volles NDI ✓, HX3 offen bis ZowieBoxen da sind
- [x] Vollbild auf gewähltem Bildschirm, ohne Menüleiste, Mauszeiger ausgeblendet
- [x] Anzeigemodus 50 Hz setzen, wenn verfügbar
- [x] Zwei Quellen gleichzeitig auf zwei Bildschirmen (Mac mini: PGM + Multiview)
- [x] 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.

Powered by TurnKey Linux.