- 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.
- 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 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.
- Mac mini ist per SSH erreichbar (Entfernte Anmeldung + Bildschirmfreigabe): App per `scp` verteilen, Quarantäne entfernen, Logs mit `log stream` mitlesen.
- „NDI Test Patterns“ sendet ein Standbild nur einmal. Eine gehaltene NDI-Verbindung zählt deshalb als lebendig; neu verbunden wird nur, wenn Frames **und** Verbindung fehlen.
- Volles NDI 1080p50 mit bewegtem Bild: ~128 Mbit/s, ~50 % eines Kerns auf dem Mac mini – fast nur NDI-Empfang/Dekodierung. HX3 (ZowieBox) noch zu messen.
- Verlorene Frames können vom **Sender** kommen: OBS auf dem Mac Studio ließ Frames aus, während dort Release-Builds liefen (~335 Frames in 6 min). Für Langzeittests darf auf dem Sender nichts Schweres laufen.
- Mauszeiger über Ausgaben per `NSCursor.hide/unhide` (gezählt, ausbalanciert), nicht `setHiddenUntilMouseMoves`.
- Core Audio direkt (AUHAL je Gerät) statt `AVAudioEngine`: einzelne Kanäle beschreiben, mehrere Quellen pro Kanal mischen, Render-Callback garantiert ohne Allokation.
- Lock-freier Ringpuffer in C (`stdatomic`), weil Swifts `Atomic` erst ab macOS 15 verfügbar ist.
- NDI liefert beim Verbinden einen Rückstau (~140 ms). Nach dem Vorfüllen wird einmalig auf die Ziel-Latenz gekürzt, sonst startet der Ton mit zu viel Verzögerung.
- OBS/DistroAV sendet Audio in 1024er-Blöcken mit bis zu ~36 ms Lücke. 50 ms Puffer gaben vereinzelte Unterläufe → NDI-Routen 80 ms, Mikro-Routen 12 ms.
- Drift-Regler langsam auslegen (Sekunden): der Füllstand ist durch die Blöcke ein Sägezahn. Im Betrieb ±150 ppm Korrektur, 0 Aussetzer in 2 min auf MOTU Out 2, CPU 0,3 %.
- Entfernte Routen werden 2 s auf dem Main Thread geparkt, damit der Render-Thread nie den letzten Verweis loslässt (sonst `free` im Callback).
- Sprechtaste global per Carbon-Hotkey (⌃⌥ Leertaste) – braucht keine Bedienungshilfen-Freigabe und meldet Drücken und Loslassen.
@ -31,13 +31,18 @@ Sobald die bestellte Hardware da ist, wird der echte Aufbau zu Hause nachgestell
- [x] M0: App auf Mac mini 2018 kopieren, per Rechtsklick → Öffnen starten (ad-hoc signiert, Gatekeeper fragt); Rückfrage „Lokales Netzwerk“ erlauben
- [x] M0: App auf Mac mini 2018 kopieren, per Rechtsklick → Öffnen starten (ad-hoc signiert, Gatekeeper fragt); Rückfrage „Lokales Netzwerk“ erlauben
- [x] M0: NDI Tools Test Patterns (oder OBS + DistroAV) auf einem anderen Gerät starten → Quelle erscheint auf beiden Macs in der Quellenliste
- [x] M0: NDI Tools Test Patterns (oder OBS + DistroAV) auf einem anderen Gerät starten → Quelle erscheint auf beiden Macs in der Quellenliste
- [ ] M1 Langzeittest (Build `m1-candidate`, ohne ZowieBoxen): OBS sendet „pgm“ (1080p50, volles NDI, bewegtes Bild), Test Patterns als zweite Quelle. Start per SSH vom Mac Studio:
- [ ] M1 Langzeittest (Build `m1-candidate` oder neuer, ohne ZowieBoxen): OBS sendet „pgm“ (1080p50, volles NDI, bewegtes Bild), Test Patterns als zweite Quelle. Start per SSH vom Mac Studio:
Nach 4 h: `~/Library/Logs/Musubi/stats-<Datum>.csv` auswerten (Verlustrate <0,1%,CPU-Verlauf,keine`stalled`-ZeilenohneUrsache).
Nach 4 h: `~/Library/Logs/Musubi/stats-<Datum>.csv` auswerten (Verlustrate <0,1%,CPU-Verlauf,keine`stalled`-ZeilenohneUrsache).
- [ ] M1: Neu verbinden: NDI-Ausgang in OBS 10 s stoppen → Bild kommt von selbst zurück, Karte zeigt „… antwortet nicht mehr. Neuer Versuch in … s.“
- [ ] M1: Neu verbinden: NDI-Ausgang in OBS 10 s stoppen → Bild kommt von selbst zurück, Karte zeigt „… antwortet nicht mehr. Neuer Versuch in … s.“
- [ ] M1: Esc auf einer Ausgabe schließt sie, Bildschirm springt auf vorige Frequenz zurück
- [ ] M1: Esc auf einer Ausgabe schließt sie, Bildschirm springt auf vorige Frequenz zurück
- [ ] M1: Mac mini zeigt PGM + Multiview 4 h ohne Aussetzer; CPU-Last: ___ %
- [ ] M1: Mac mini zeigt PGM + Multiview 4 h ohne Aussetzer; CPU-Last: ___ %
- [ ] M1: Latenz Multiview messen (Uhr mit Millisekunden vor Kamera → ATEM → ZowieBox → Musubi): ___ ms
- [ ] M1: Latenz Multiview messen (Uhr mit Millisekunden vor Kamera → ATEM → ZowieBox → Musubi): ___ ms
- [ ] M2 Langzeittest (4 h, MOTU M2 am Regie-Mac): OBS-Ton als Quelle, Start mit
`open Musubi.app --args --audio-route "ndi:MACSTUDONSAMUEL (pgm)=M2:2"`, Headset per Ansicht „Ton“ auf Out 1.
Danach `~/Library/Logs/Musubi/audio-<Datum>.csv` auswerten: Spalte `dropouts` bleibt 0, `peak_dbfs` zeigt Signal. Auf dem Sender (OBS) nichts Schweres laufen lassen.
- [ ] M2: Sprechtaste (⌃⌥ Leertaste, gedrückt halten und umschalten) – Ton auf Out 1 ohne spürbare Verzögerung, Knopf rot nur während des Sprechens
- [ ] M2: MOTU während des Betriebs abziehen und wieder anstecken → Ton kommt von selbst zurück
- [ ] M2: PGM-Ton über M2 Out 2 → Ui12 Kanal 4; Talkback M2 Out 1 → Ui12 Kanal 3 (nur Aux 2)
- [ ] M2: PGM-Ton über M2 Out 2 → Ui12 Kanal 4; Talkback M2 Out 1 → Ui12 Kanal 3 (nur Aux 2)