Projekt

Stream-Werkzeuge zentral

Alle Werkzeuge unter einem Dach: der Rechner führt aus, eingerichtet und bedient wird zentral.

Gernot (BigBoss) entscheidet, prüft ab, bedient im Betrieb Claude-Hetzner (Boss) Server, Weboberflächen, Quelltext — diese Umgebung Claude-CAPT (UnterBoss) Cowork auf CAPT-SERVER-1: Windows-Lokales, Ausrollen, Live-Test
0/40 gelöst Fassung 21
1

AVI-Mover fernsteuern

Änderungen per Befehl statt an jedem Rechner. Dazu eine kleine Steuerzentrale, die auch zeigt, was das Werkzeug gerade tut — Log auf dem Server mitlesen. Server und lokal.

0 von 6 gelöst 0 % 6 noch offen
0 gelöst 6 offen ◇ 6 ohne eingetragene Lösung

Das Ziel

Jede laufende AVI-Mover-Instanz lässt sich vom Browser aus beobachten und ändern, ohne dass jemand an den Rechner geht. Der Anlass ist bekannt: Am Austrian Cup stand in allen acht Paketen derselbe Replay-Ordner, und die Korrektur kostete einen Gang zu jeder Matte — mitten im Betrieb.

Beobachten heißt: aktueller Zustand, laufende Datei, Zähler für verschoben / misslungen / leer, und das Log mitlesen — nicht nur die letzte Zeile, sondern der Verlauf, so wie er im Fenster steht.

Ändern heißt: Quellordner, Serverziel, Kanal, Statusordner und Turniername setzen; starten, stoppen, neu starten, pausieren; Liegengebliebenes nachholen.

An zwei Orten bedienbar: lokal in der Halle auf dem Capt-Server, ohne Internet — und vom Hetzner aus, wenn jemand von außen schauen soll. Beide zeigen dasselbe.

Nicht Teil des Ziels: den Mover selbst ablösen. Er bleibt das PowerShell-Programm auf jedem Laptop, weil er dort überwachen und verschieben muss. Was verschwindet, ist der Gang an den Rechner.

1

Befehlsdatei statt WebSocket

Der Rückkanal steht schon: Jeder Mover schreibt seine status.json in einen Statusordner (\\capt-server-1\www-root\avi-mover\matteN). Denselben Ordner kann er lesen. Die Zentrale legt dort befehl.json ab, der Mover holt sie in seinem bestehenden 250-ms-Takt ab, führt aus und quittiert.

Ein echter WebSocket in PowerShell-WinForms bräuchte Reconnect-Logik und Nebenläufigkeit und brächte nur Latenz unter einer Sekunde. Für „Pfad ändern, neu starten, Turnier umbenennen" ist das ohne Wert. Bei OBS ist das anders — dort ist WebSocket die eingebaute Schnittstelle, siehe Punkt 4.

2

Rückfallkette Capt-Server → RTMP-Server

Gernots Festlegung: erst Capt-Server, dann RTMP-Server. Das gilt für das Lesen der Befehle und fürs Schreiben der status.json. Fällt der Capt-Server aus, läuft die Steuerung weiter und die Zentrale auf dem RTMP-Server zeigt dasselbe Bild.

RTMP-SERVER

RTMP-SERVER-1 : 192.168.1.210 RTMP-SERVER-2 : 192.168.1.211
3

Eigene Konfigdatei, nicht die INI

Die Zeilen der AVI-Mover.ini sind positionsgebunden (0-basig: 2 Quelle, 4 Serverziel, 5 Kanal, 6 Statusordner, 7 Turnier). Eine zusätzliche Zeile verschiebt alles — genau diese Falle hat am 03.10. Zeit gekostet. Die Adressen der Zentralen kommen deshalb in eine eigene avimover_config.json daneben.

Der Name ist mit Absicht so gewählt: Er trifft das Schutzmuster *_config.json in Get-SchutzDateien des Stream-Tools-Updaters. Damit überschreibt kein Update die örtliche Einrichtung, die neue Fassung landet als .neu daneben.

{ "zentralen": ["\\\\capt-server-1\\www-root\\avi-mover",
                "\\\\rtmp-server-1\\www-root\\avi-mover"],
  "kanal": "matte1", "takt_ms": 1000 }
4

Log in Scheiben zum Server

Das Fenster-Log soll auch auf dem Server lesbar sein. Nicht die ganze Datei bei jedem Takt — der Mover schreibt fortlaufend an log.txt im Statusordner, die Zentrale holt nur den Zuwachs ab der letzten Position.

Dazu in status.json zwei Felder: Länge der Logdatei und Zeitstempel. So sieht die Zentrale ohne Dateizugriff, ob es etwas Neues gibt.

5

Pfadwechsel absichern

Der nützlichste Befehl ist zugleich der, der eine laufende Matte lahmlegen kann. Deshalb: Der Mover lehnt ab, solange er gerade kopiert, prüft das neue Ziel mit Test-Path bevor er es übernimmt, und schreibt den Grund in die Quittung. In der Oberfläche sitzt der Knopf hinter einer Rückfrage.

Dazu gehört, was AVI-Mover nicht tut: Zielordner anlegen (AVI-Mover.ps1:1058 prüft nur). Die Zentrale muss das vorher können oder deutlich sagen, dass der Ordner fehlt.

6

Steuerzentrale: eine Zeile je Matte

Eine Seite, vier Zeilen. Je Zeile: Zustand, letzte Datei, Zähler, Quell- und Zielordner, und die Knöpfe. Darunter aufklappbar das Log.

Der eigentliche Gewinn ist das Nebeneinander: Die Fehler vom Austrian Cup saßen alle an den Nahtstellen — Replay-Ordner zeigte auf Matte 1, Serverziel ins Nirgendwo, Cams leer. Jedes Werkzeug für sich sah in Ordnung aus. Vier Zeilen untereinander hätten es sofort gezeigt.

Dazu ein Knopf „an alle" für das, was sich mit der Mattenzahl multipliziert: Turniername, Tageswechsel, Zielordner mit eingesetzter Mattennummer.

7
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Befehlsleser im Mover

Block im bestehenden $Timer.Add_Tick, jede Sekunde (jeder 4. Takt). Liest befehl.json aus der ersten erreichbaren Zentrale, führt aus, schreibt quittung/<id>.json, löscht die Befehlsdatei. Befehle: neustart, beenden, pause/weiter, pfade, nachholen, logholen.

Quelltext-Arbeit an der .ps1 — Syntax mit pwsh geprüft, BOM erhalten. Ausrollen macht der PC.

🔧 Von Hand, ohne Cowork

Einen Befehl ohne Zentrale absetzen — die Datei einfach selbst schreiben:

  1. Im Statusordner der Matte eine Datei befehl.json anlegen, etwa \\capt-server-1\www-root\avi-mover\matte2\befehl.json:
    {"id":"hand-1","was":"pfade",
     "ziel":"\\\\STREAM-SPACE\\Video-Stream\\Replay\\Austria Cup\\TAG2\\Matte 2"}
  2. Der Mover holt sie binnen einer Sekunde ab und löscht sie.
  3. Ergebnis nachlesen in quittung\hand-1.json — dort steht, ob es geklappt hat und warum nicht.

Verschwindet die Datei nicht, liest der Mover sie nicht: falscher Ordner, oder die neue Fassung läuft noch nicht auf diesem Rechner.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
8
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

avimover_config.json + Rückfallkette

Lesen der Konfigdatei, Reihenfolge der Zentralen durchprobieren, Schreiben der status.json in die erste erreichbare. Fällt eine weg, ohne Abbruch weiterlaufen und das im Zustand vermerken.

🔧 Von Hand, ohne Cowork
  1. Im AVI-Mover-Ordner neben AVI-Mover.ini eine Datei avimover_config.json anlegen:
    { "zentralen": ["\\\\capt-server-1\\www-root\\avi-mover",
                    "\\\\rtmp-server-1\\www-root\\avi-mover"],
      "kanal": "matte1", "takt_ms": 1000 }
  2. Mit Notepad speichern, Kodierung UTF-8.
  3. Mover neu starten. In der Kopfzeile muss die erste erreichbare Zentrale stehen.

Doppelte Backslashes beachten — in JSON ist \ ein Steuerzeichen. Wer sie einfach schreibt, bekommt eine Datei, die der Mover nicht lesen kann, und keine Fehlermeldung.

Der Name ist Absicht: *_config.json ist im Stream-Tools-Updater geschützt und überlebt jedes Update.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
9
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Steuerzentrale (Weboberfläche)

Eine Seite neben dem Regie-Dashboard auf dem Capt-Server. Liest alle status.json, schreibt befehl.json, zeigt die Quittungen. Vier Zeilen, Logs aufklappbar, „an alle"-Knopf.

Läuft lokal ohne Internet; dieselbe Seite auch auf dem Hetzner.

🔧 Von Hand, ohne Cowork

Was die Zentrale zeigt, steht auch ohne sie da — nur verstreut:

  1. Zustand je Matte: im Browser
    http://192.168.1.10/avi-mover/matte1/status.json
    Dort stehen Zustand, laufende Datei und die Zähler.
  2. Welche Dateien erkannt wurden: im selben Ordner die Datei <Turnier>__Matte-N.json.
  3. Das Log: im Fenster des Movers am jeweiligen Rechner.

Vier Matten heißt vier Browser-Reiter — unbequem, aber vollständig.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
10
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

Auf die Laptops bringen und live prüfen

Neue .ps1 und avimover_config.json auf LAPTOP-STREAM-1 bis -4, Mover neu starten, einen Befehl je Matte durchspielen. Windows-lokal, Admin-Rechte, Live-Test — das kann nur der PC.

Danach: Paket im Stream-Tools-Updater aktualisieren, damit der Stand erhalten bleibt.

🔧 Von Hand, ohne Cowork
  1. AVI-Mover.ps1 und avimover_config.json auf den Laptop kopieren, in den Ordner des jeweiligen OBS-Pakets.
  2. Laufenden Mover beenden (Fenster schließen; der Watchdog startet ihn sonst neu).
  3. Neu starten und die Kopfzeile prüfen — Quelle, Ziel, Statusordner, Turniername müssen stimmen.
  4. Einen Befehl zur Probe absetzen (siehe „Befehlsleser im Mover").

Bei .ps1 auf die BOM achten — fehlt sie, stirbt das Skript auf dem Zielrechner beim Laden. Mit Notepad als „UTF-8 mit BOM" speichern.

Danach ins Updater-Paket übernehmen, sonst ist der Stand beim nächsten Ausrollen wieder weg.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
11
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

RTMP-Server als Rückfall einrichten

Adresse und Webroot klären, Ordner avi-mover/matteN anlegen, Schreibrecht prüfen. Dann in die Konfigdatei eintragen.

🔧 Von Hand, ohne Cowork
  1. Auf dem RTMP-Server im Webroot die Ordner anlegen:
    avi-mover\matte1
    avi-mover\matte2
    avi-mover\matte3
    avi-mover\matte4
  2. Schreibrecht prüfen — vom Streaming-Laptop aus eine Testdatei hineinlegen:
    echo test > \\rtmp-server-1\www-root\avi-mover\matte1\test.txt
    Klappt das, wieder löschen.
  3. Adresse in avimover_config.json als zweite Zentrale eintragen.
  4. Probe: Capt-Server kurz vom Netz nehmen. Der Mover muss weiterlaufen und seinen Zustand auf dem RTMP-Server ablegen.
Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
12
○ Offen ◇ Ohne Lösung 👤 Gernot (BigBoss)

Abnahme

Durchspielen am Turniertag oder im Trockenlauf: Zielordner aller vier Matten aus der Zentrale umstellen, Turniername an alle, einmal nachholen lassen, Log auf dem Server mitlesen.

🔧 Von Hand, ohne Cowork

Prüfliste zum Abhaken:

  1. Zielordner aller Matten aus der Zentrale umstellen — kommt an jeder die richtige Mattennummer an?
  2. Turniername an alle.
  3. Einmal „nachholen" — werden liegengebliebene Dateien verschoben?
  4. Log auf dem Server mitlesen, während eine Aufnahme entsteht.
  5. Eine Matte vom Netz nehmen: Meldet die Zentrale das, oder sieht es aus wie Erfolg?
  6. Pfadwechsel während des Kopierens versuchen — muss abgelehnt werden.
Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
13
2

Hallenmikrofon auf WebRTC

Weg vom RTMP-Umweg. Der alte Microphon-Broadcaster wird abgeschafft, nicht ersetzt.

0 von 5 gelöst 0 % 5 noch offen
0 gelöst 5 offen ◇ 5 ohne eingetragene Lösung

Was wir heute haben — und warum es weg kann

Bisher lief der Hallenton über ein eigenes Windows-Programm (Microphon-Broadcaster, PowerShell mit mitgeliefertem ffmpeg): Geräteliste, ein oder zwei Mikrofone, dazu ein schwarzes Videobild — weil RTMP ohne Videospur nicht auskommt — und per RTMP an einen Restreamer (192.168.1.210 / .212).

Das wird nicht abgelöst, sondern abgeschafft. Gernot, 04.10.2026: „Den brauchen wir nicht mehr." Es taugt deshalb auch nicht als Messlatte — wir bauen den Weg neu, nicht nach.

Was aus dem alten Aufbau bleibt, ist eine einzige Erkenntnis: Der Umweg über RTMP zwingt zu einer Videospur für einen reinen Tonkanal. Genau die fällt mit WebRTC weg.

14

Das Ziel

Der Hallenton kommt ohne eigenes Programm auf einem Rechner in alle OBS-Instanzen. Quelle auswählen, starten, stoppen — vom Browser aus, mit derselben Oberfläche wie die übrigen Werkzeuge.

Anforderungen: Auswahl der Tonquelle, wenn mehrere am Rechner hängen; ein klarer Zustand — läuft / läuft nicht — mit Pegelanzeige; und selbsttätiges Wiederverbinden nach einem Abriss.

Wie groß der Gewinn bei der Verzögerung ausfällt, messen wir in der Testphase. Vorher lege ich dazu keine Zahl fest.

15

MediaMTX als Drehscheibe statt MonaServer

Mein Vorschlag: MediaMTX auf dem Capt-Server. Er nimmt WebRTC per WHIP entgegen und gibt denselben Strom wahlweise als SRT, RTSP oder RTMP wieder aus. Damit ersetzt ein Dienst den MonaServer und kann beides: modern rein, vertraut raus.

Der Vorteil liegt in der OBS-Seite: Die bleibt eine Medienquelle wie bisher, nur mit anderer Adresse. Kein Plugin, kein Umbau der Szenen, kein neues Verfahren, das am Turniertag zum ersten Mal auf die Probe gestellt wird.

MediaMTX ist ein einzelnes Programm ohne Installation, läuft als Dienst und wird über eine einzige mediamtx.yml eingerichtet.

16

Der Sender wird eine Webseite

Statt PowerShell und mitgeliefertem ffmpeg: eine kleine Seite auf dem Capt-Server. Sie fragt den Browser nach den Tonquellen (enumerateDevices), zeigt sie in einer Liste, dazu ein Pegel und zwei Knöpfe. Gesendet wird per WHIP an MediaMTX.

Damit fällt der Broadcaster als eigenes Programm weg. Jedes Gerät mit Browser kann Sender sein — der Regie-Laptop, ein zweiter Rechner, notfalls ein Handy. Nichts zu installieren, nichts zu aktualisieren.

17

HTTPS — die CA steht schon

Weitgehend erledigt. Die eigene Stamm-CA läuft seit 17.08.2026:

Judo Fanpage Stream-CA        10 Jahre, kein Intermediate
  └── CAPT-Server-1           gültig bis 18.09.2027

Verwaltet im Stream-Tools-Updater, Reiter Zertifikate (ZERT-V1). Abyss steht auf HTTP & HTTPS, Zertifikat und Schlüssel sind als Inhalt eingetragen. Die Sender-Seite kann dort also sofort gesichert laufen.

Was offen bleibt:

  • Nur über den Hostnamen aufrufen. Das Zertifikat enthält bewusst keine IP — nur CAPT-Server-1 und CAPT-Server-1.JUDO-FANPAGE. Über https://192.168.1.10/… schlägt es fehl, und der Browser rückt dann kein Mikrofon heraus.
  • MediaMTX ist ein eigener Dienst, nicht Abyss. Für WHIP braucht er dasselbe Zertifikat noch einmal, in seiner Konfiguration als Dateipfad.
  • Auf jedem sendenden Gerät muss Stream-CA.crt im Stammspeicher liegen (Updater-Knopf Auf DIESEM PC vertrauen). Für Rechner längst erledigt; ein Handy als Sender wäre eine eigene Baustelle, dort ist das deutlich mühsamer.

Wiedervorlage: Server-Zertifikate laufen nach 397 Tagen ab. Nach dem Erneuern müssen sie erneut in Abyss eingetragen werden — und künftig auch bei MediaMTX.

18

Rückweg für den Turniertag

Bis WebRTC einen kompletten Turniertag ohne Zwischenfall gelaufen ist, bleibt der bisherige RTMP-Weg als Rückfall erreichbar — die OBS-Quelle lässt sich in Sekunden zurückstellen.

Ein Tonausfall in der Halle ist nicht reparabel, während er passiert.

19
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

MediaMTX einrichten

Auf dem Capt-Server entpacken, mediamtx.yml schreiben (WHIP rein, SRT/RTSP raus, Pfad hallenmikro), als Dienst einrichten, Port in der Firewall freigeben. Windows-lokal.

🔧 Von Hand, ohne Cowork
  1. MediaMTX für Windows herunterladen, entpacken nach C:\MediaMTX. Es ist ein einzelnes Programm, keine Installation.
  2. mediamtx.yml mit Notepad öffnen und eintragen:
    api: yes
    apiAddress: 127.0.0.1:9997
    
    paths:
      hallenmikro:
    Einrückung mit zwei Leerzeichen, niemals Tabulatoren.
  3. Zum Ausprobieren mediamtx.exe doppelklicken — es öffnet ein Fenster mit Protokoll. Läuft es, als Dienst einrichten (etwa mit nssm), damit es den Neustart übersteht.
  4. Prüfen:
    http://localhost:9997/v3/paths/list
  5. In der Windows-Firewall die benutzten Ports für private Netze freigeben.

Startet es nicht, steht im Fenster die Zeilennummer — fast immer ein Tabulator in der YAML.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
20
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

Zertifikat für MediaMTX bereitstellen

Das bestehende Zertifikat aus D:\Stream-Tools-Updater\Zertifikate für MediaMTX als Dateipfad hinterlegen. Prüfen, auf welchen Geräten Stream-CA.crt schon im Stammspeicher liegt.

🔧 Von Hand, ohne Cowork
  1. Im Stream-Tools-Updater, Reiter Zertifikate, die PEM-Dateien ausgeben lassen (Ablage D:\Stream-Tools-Updater\Zertifikate).
  2. In der mediamtx.yml eintragen:
    encryption: optional
    serverCert: C:\MediaMTX\capt-server-1.crt
    serverKey:  C:\MediaMTX\capt-server-1.key
  3. Dienst neu starten.
  4. Prüfen, ob die CA auf dem sendenden Rechner bekannt ist — im Updater der Knopf Auf DIESEM PC vertrauen, braucht Verwalterrechte.

Immer über den Namen aufrufen, nie über die IP: Im Zertifikat stehen nur CAPT-Server-1 und CAPT-Server-1.JUDO-FANPAGE.

Wiedervorlage: Nach einer Erneuerung muss das Zertifikat an zwei Stellen neu hinterlegt werden — in Abyss und hier.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
21
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Sender-Seite bauen

Geräteliste, Pegel, Start/Stopp, WHIP-Verbindung, zwei Quellen mischbar. Zustand sichtbar, Wiederverbinden bei Abriss. Liegt neben dem Regie-Dashboard und später in der Stream-Regie (Punkt 4).

🔧 Von Hand, ohne Cowork

Ohne die Sender-Seite lässt sich der Ton trotzdem einspeisen — mit ffmpeg vom Rechner, an dem das Mikrofon hängt:

  1. Gerätenamen holen:
    ffmpeg -list_devices true -f dshow -i dummy
  2. Senden:
    ffmpeg -f dshow -i audio="Name des Mikrofons" -c:a aac -b:a 128k
      -f rtsp rtsp://capt-server-1:8554/hallenmikro
  3. Das Fenster offen lassen — schließt man es, endet die Übertragung.

Das ist der Notbehelf, nicht das Ziel: ein Fenster, das jemand offenhalten muss, auf einem bestimmten Rechner. Genau das soll die Seite ablösen.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
22
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

OBS-Quelle umstellen

In einer Instanz die Medienquelle auf MediaMTX umstellen und gegen den MonaServer-Weg vergleichen. Erst danach die übrigen.

🔧 Von Hand, ohne Cowork
  1. In OBS eine Medienquelle anlegen, Haken bei „Lokale Datei" entfernen.
  2. Eingabe:
    srt://capt-server-1:8890?streamid=read:hallenmikro
    Falls SRT zickt:
    rtsp://capt-server-1:8554/hallenmikro
  3. „Erneut verbinden bei Verbindungsverlust" an, Verzögerung 2 s.
  4. „Wiedergabe beenden, wenn Quelle nicht sichtbar" aus — der Ton soll laufen, auch wenn die Quelle in keiner sichtbaren Szene liegt.
  5. Im Mischpult prüfen, ob ein Pegel ausschlägt.

Zurück auf den alten Weg geht jederzeit: Adresse auf die MonaServer-URL ändern, fertig.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
23
○ Offen ◇ Ohne Lösung 👤 Gernot (BigBoss)

Testphase

Drei Dinge, die wir wirklich prüfen müssen:

  • Verzögerung messen — gegen Bild und gegen den bisherigen Weg, nicht geschätzt, sondern mit Klappe oder Tongeber.
  • Dauerlauf — mehrere Stunden am Stück, nicht fünf Minuten. Die Frage ist nicht, ob es startet, sondern ob es nach drei Stunden noch läuft.
  • Abriss und Rückkehr — WLAN weg, Browser zugeklappt, Rechner im Ruhezustand. Verbindet sich alles von selbst wieder, und wie lange dauert es?
🔧 Von Hand, ohne Cowork

Messen statt schätzen:

  1. Verzögerung: Vor dem Mikrofon klatschen, dabei den Stream auf einem zweiten Gerät mitschneiden. Abstand zwischen Klatschen im Bild und im Ton ausmessen. Dasselbe über den alten Weg, dann vergleichen.
  2. Dauerlauf: Morgens starten, abends nachsehen. Lief es durch? Steht im MediaMTX-Fenster etwas über Abbrüche?
  3. Abriss: WLAN des Senders kurz aus und wieder an. Kommt der Ton von selbst zurück, und nach wie vielen Sekunden?
  4. Browser zu: Sender-Fenster schließen — meldet das Dashboard das, oder sieht es aus wie Betrieb?

Drei Zeilen je Versuch notieren. Ohne Notizen bleibt jede Aussage über den Dauerbetrieb geraten.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
24
3

Hallenkameras

Alle fünf Kameras müssen in jede OBS-Instanz. Verkabelte liest der Capt-Server ein, kabellose senden selbst — verteilt wird beides gleich.

0 von 5 gelöst 0 % 5 noch offen
0 gelöst 5 offen ◇ 5 ohne eingetragene Lösung

Das Ziel

Alle Hallenkameras müssen in jede OBS-Instanz. Die vier Matten laufen auf vier Laptops — eine Kamera, die am Capt-Server hängt, sieht dort niemand. Jede Kamera wird also verteilt, unabhängig davon, ob sie am Kabel hängt oder nicht.

Zuständig ist der Capt-Server. Er nimmt alle Kameras entgegen und gibt sie an die Matten weiter. Je nach Last und Aufgabe kann ein RTMP-Server das übernehmen — das wird beim Event entschieden und bleibt flexibel.

Nicht Teil des Ziels: die Mattenkameras. Die hängen direkt am jeweiligen OBS und bleiben, wo sie sind.

25

Alle müssen verteilt werden — der Weg dahin unterscheidet sich

Alle fünf Kameras gehen über die Drehscheibe. Der Unterschied liegt nur darin, wie sie dorthin kommen — und das entscheidet die Verkabelung:

KameraAnschlussWeg zur DrehscheibePfad
Hallen-Kamera-1Kabel am Capt-Server Capt-Server liest sie ein und sendethallen-kamera-1
Hallen-Kamera-2Kabel am Capt-Server ditohallen-kamera-2
Hallen-Kamera-3Kabel am Capt-Server ditohallen-kamera-3
Bewegt-Hallenkamerakein Kabel Handy sendet selbst (Larix)kamera-bewegt
Siegerehrungkein Kabel Handy sendet selbst (Larix)kamera-siegerehrung

Die verkabelten holt sich der Capt-Server selbst. MediaMTX kann ein angeschlossenes Gerät beim Start einlesen und als Pfad bereitstellen — kein zusätzliches Programm, kein Fenster, das jemand offen halten muss. Fällt die Kamera aus und kommt wieder, holt MediaMTX sie von selbst zurück.

Die kabellosen senden selbst — Handy mit Larix auf denselben Dienst. Für sie gilt alles, was in Punkt 2 zum Mikrofon steht.

In OBS sieht am Ende alles gleich aus: fünf Medienquellen, fünf Adressen, gleiche Bauart. Ob dahinter ein Kabel oder ein Handy steckt, merkt die Matte nicht — und genau so soll es sein.

26

Overlays: in OBS, nicht in der Kamera

Gernots offene Frage: Overlays in der Kamera-Kette oder in OBS?

Meine Empfehlung: OBS machen lassen. Ein Overlay, das schon im Kamerabild steckt, ist eingebrannt — es lässt sich nicht mehr ausschalten, nicht verschieben, nicht gegen ein anderes tauschen, und wenn der Name falsch geschrieben ist, muss jemand zur Kamera laufen. In OBS bleibt es eine Ebene über dem Bild: ein Klick aus, ein Klick an.

Dazu kommt, dass die Overlay-Infrastruktur bereits steht — Studio, Szenen, Docks, alles zentral änderbar. Eine zweite Overlay-Kette in der Kamera wäre ein Werkzeug mehr, das gepflegt werden will.

Der Preis: Jede OBS-Instanz, die eine Hallenkamera zeigt, braucht die passende Szene. Das ist Arbeit beim Einrichten — aber Arbeit, die der Lotse mitliefern kann, und sie fällt einmal an statt bei jedem Umschalten.

Ausnahme, falls doch nötig: eine feste Einblendung, die immer gleich bleibt und nie weg soll (etwa ein kleines Logo in der Ecke). So etwas darf in die Kamera-Kette, weil niemand es je abschalten will.

27

Der Lotse entscheidet, welche Kamera dabei ist

Gernots Festlegung (04.10.2026): Ob eine Hallenkamera überhaupt dabei ist, wird im Lotsen entschieden — beim Zusammenstellen des OBS-Pakets, nicht am Turniertag an vier Laptops.

Zwei Wege, wenn eine Kamera nicht gebraucht wird: die Quelle deaktivieren oder sie gar nicht erst ins Paket packen.

Meine Empfehlung: drin lassen, deaktiviert. Eine fehlende Quelle muss jemand am Turniertag von Hand anlegen — Name, Adresse, Transformation, Einpassung. Das ist genau die Handarbeit, die wir loswerden wollen. Eine deaktivierte Quelle dagegen ist ein Klick auf das Auge.

Damit das sauber bleibt, muss bei jeder Kameraquelle „Wiedergabe beenden, wenn Quelle nicht sichtbar" gesetzt sein. Sonst hängt eine unsichtbare Quelle weiter an der Drehscheibe, verbraucht Bandbreite und meldet Verbindungsfehler für etwas, das niemand sieht.

Rausziehen lohnt nur, wenn eine Kamera auf Dauer wegfällt — dann gehört sie auch nicht mehr in die Vorlage, aus der der Lotse baut.

Was der Lotse dafür braucht: eine Angabe je Paket, welche Kameras aktiv sind. Das passt zu der Vorbelegung, die laut Punkt „Vorbelegung im JEM" mitfahren könnte — aber auch ohne sie: Beim Paketbau wird es ohnehin entschieden, es muss nur festgehalten werden.

28

Welcher Weg für die kabellosen

Für die beiden kabellosen Kameras — Siegerehrung und die bewegliche — kommen drei Wege in Frage. Sie unterscheiden sich vor allem darin, was passiert, wenn das WLAN kurz wegbricht.

Larix Broadcaster sendet vom Handy direkt per RTMP oder SRT, ohne Rechner dazwischen. Bei uns bereits im Einsatz, die Grenzen sind bekannt. Mein Vorschlag für beide.

DroidCam macht das Handy zur Webcam über USB oder WLAN. Braucht einen Rechner in der Nähe — bei der Siegerehrung also einen zusätzlichen Aufbau, den wir gerade loswerden wollen.

Der Browser mit derselben Sender-Seite wie beim Mikrofon, nur mit Video. Spart eine App — aber Handybrowser schlafen ein, sobald der Bildschirm dunkel wird, und dann ist das Bild weg. Für Dauerbetrieb nicht geeignet, für eine kurze Interviewstrecke schon.

Entschieden wird nach dem ersten Test, nicht vorher.

29

Capt-Server oder RTMP-Server — je Event

Wer nimmt die kabellosen Kameras entgegen — Capt-Server oder RTMP-Server?

Das wird beim Event entschieden, nicht vorab festgelegt. Gernot, 04.10.2026: „Das soll flexibel bleiben." Eine Halle mit vier Matten und Replay-Betrieb verteilt anders als ein Ligakampftag mit einer Matte.

Voreinstellung ist der Capt-Server — dort liegen ohnehin Regie-Dashboard, AVI-Mover-Statusordner und künftig das Mikrofon. Ein Rechner weniger im Spiel.

Umziehen lohnt, wenn der Capt-Server gleichzeitig Replays ausspielt und mehrere Kameras weiterverteilt. Dann bekommt der RTMP-Server die Kameras, der Capt-Server behält Replay und Steuerung.

Der Umzug ist eine Zeile: In der Sender-App ein anderer Rechnername, in OBS ebenso. Pfadnamen und Aufbau bleiben gleich — genau deshalb muss man es nicht vorher wissen. Was im Aufbau gleich bleibt, darf im Betrieb wandern.

30

Vorbelegung im JEM, Anpassung vor Ort

Flexibel heißt nicht, dass man am Turniertag bei null anfängt. Im Event-Manager könnte je Event stehen, was vorgesehen ist — welche Kameras mitkommen und wer sie entgegennimmt. Nicht als Festlegung, sondern als Vorschlag, den man vor Ort umwirft, wenn es anders kommt.

Wo es hingehört: Die Bridge überträgt bereits device_counts aus dem Event-Manager zum Capt-Server — Hallenkameras, Mikrofone, Zusatzkameras. Das ist die Stelle, an der so eine Vorbelegung mitfahren könnte, ohne einen neuen Weg zu bauen.

Was dafür spricht: Beim Aufbau steht dann auf dem Schirm, was geplant war — statt dass jemand im Kopf hat, dass diesmal die Bewegt-Hallenkamera dabei ist. Die Fehler am Austrian Cup kamen nicht daher, dass etwas unmöglich war, sondern dass niemand sah, wie es gemeint war.

Was dagegen spricht: Ein Vorschlag, den niemand pflegt, ist schlimmer als keiner — er behauptet etwas. Das lohnt sich also nur, wenn die Angabe beim Anlegen des Events ohnehin anfällt.

Und vor Ort anpassbar. Der Vorschlag aus dem Event-Manager ist der Stand beim Planen; was gilt, entscheidet sich beim Aufbau. Die Zuordnung muss sich deshalb in der Stream-Regie ändern lassen (Punkt 4) — nicht im JEM, nicht in einer Datei auf einem Rechner.

Daraus folgt eine Anforderung an Punkt 4: Die Regie zeigt je Kamera, was vorgesehen war und was tatsächlich läuft, und erlaubt das Umhängen auf den anderen Server mit einem Griff. Weicht beides voneinander ab, ist das kein Fehler — nur eine Auskunft.

Entscheidung vertagt, bis Punkt 3 einmal gelaufen ist. Vorher wissen wir nicht, welche Angaben sich überhaupt lohnen.

31
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

MediaMTX-Pfade für alle fünf Kameras

Fünf Kamerapfade plus das Mikrofon aus Punkt 2. Die drei verkabelten bekommen zusätzlich einen Einlesebefehl, die beiden kabellosen nicht — dort sendet das Handy von sich aus hinein.

🔧 Von Hand, ohne Cowork
  1. mediamtx.yml im MediaMTX-Ordner mit Notepad öffnen.
  2. Im Abschnitt paths: eintragen — Einrückung mit Leerzeichen, niemals Tabulatoren:
    paths:
      hallenmikro:
      kamera-bewegt:
      kamera-siegerehrung:
    
      hallen-kamera-1:
        runOnInit: ffmpeg -f dshow -i video="Hallen-Kamera-1"
          -c:v libx264 -preset ultrafast -tune zerolatency
          -f rtsp rtsp://localhost:8554/hallen-kamera-1
        runOnInitRestart: yes
    Für Kamera 2 und 3 denselben Block, überall die Nummer ändern — im Pfadnamen, im Gerätenamen und in der Zieladresse.
  3. Den Gerätenamen muss man genau treffen. Liste ausgeben lassen:
    ffmpeg -list_devices true -f dshow -i dummy
    Die Namen stehen in Anführungszeichen hinter DirectShow video devices — genau so übernehmen, mit Leerzeichen und Bindestrichen.
  4. Speichern, Dienst neu starten:
    net stop mediamtx
    net start mediamtx
  5. Prüfen — im Browser auf dem Capt-Server:
    http://localhost:9997/v3/paths/list
    Bei den verkabelten muss ready: true stehen, ohne dass jemand sendet. Steht dort false, stimmt der Gerätename nicht oder die Kamera ist belegt.

Häufigster Fehler: Eine andere Anwendung hält die Kamera — Windows gibt sie nur einmal heraus. Ein offenes OBS oder die Kamera-App auf dem Capt-Server reichen.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
32
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

Hallen-Kamera-1 bis 3 einlesen lassen

Hallen-Kamera-1, -2 und -3 anschließen und prüfen, dass der Capt-Server sie einlesen kann. Das Verteilen übernimmt dann MediaMTX.

🔧 Von Hand, ohne Cowork
  1. Kamera anschließen. Im Geräte-Manager prüfen, ob Windows sie als Bildverarbeitungsgerät erkennt.
  2. Gerätenamen holen:
    ffmpeg -list_devices true -f dshow -i dummy
  3. Einmal ohne MediaMTX prüfen, ob das Bild kommt:
    ffplay -f dshow -i video="Hallen-Kamera-1"
    Kommt hier nichts, liegt es an der Kamera oder am Treiber — dann hat es keinen Zweck, in MediaMTX weiterzusuchen.
  4. Namen in die mediamtx.yml eintragen (siehe Pfade-Aufgabe), Dienst neu starten.
  5. In jeder OBS-Instanz eine Medienquelle, Haken bei „Lokale Datei" entfernen:
    srt://capt-server-1:8890?streamid=read:hallen-kamera-1
    Falls SRT zickt:
    rtsp://capt-server-1:8554/hallen-kamera-1

Das gehört in die OBS-Pakete, nicht in Handarbeit an vier Laptops — siehe die Aufgabe „Szenen in OBS vorbereiten".

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
33
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

Bewegt-Hallenkamera und Siegerehrung

Bewegt-Hallenkamera und Siegerehrung über Larix auf die Drehscheibe.

🔧 Von Hand, ohne Cowork
  1. Larix öffnen, Zahnrad, Connections, neue Verbindung.
  2. URL eintragen — je Kamera ein eigener Pfad:
    rtmp://capt-server-1:1935/kamera-bewegt
    rtmp://capt-server-1:1935/kamera-siegerehrung
    Zickt die Namensauflösung im Hallennetz, die IP verwenden — bei RTMP spielt das Zertifikat keine Rolle.
  3. Unter Video Auflösung und Bildrate einstellen, die Handy und WLAN tragen. Wir legen vorher keine Zahl fest, das wird gemessen.
  4. Zurück, roter Knopf, senden.
  5. In OBS eine Medienquelle, Haken bei „Lokale Datei" entfernen:
    srt://capt-server-1:8890?streamid=read:kamera-siegerehrung
    Falls SRT zickt:
    rtsp://capt-server-1:8554/kamera-siegerehrung

Handy-Fallen: Die Bildschirmsperre beendet bei manchen Geräten die Übertragung — in den Energieeinstellungen für Larix „keine Einschränkung" setzen. Und ans Ladekabel: Senden zieht ordentlich Strom.

Soll der RTMP-Server übernehmen: in Schritt 2 und 5 nur den Rechnernamen tauschen, sonst ändert sich nichts.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
34
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Kameras in die OBS-Pakete einbauen

Die Kameras kommen fertig in die Pakete des Lotsen — Quelle angelegt, Adresse eingetragen, eingepasst, Overlay darüber. Nicht aktive Kameras bleiben als deaktivierte Quelle drin.

🔧 Von Hand, ohne Cowork

Je Kamera in der Szenensammlung:

  1. Medienquelle anlegen, Haken bei „Lokale Datei" entfernen.
  2. Eingabe:
    srt://capt-server-1:8890?streamid=read:hallen-kamera-1
  3. „Wiedergabe beenden, wenn Quelle nicht sichtbar" setzen — Pflicht, sonst läuft eine ausgeblendete Kamera im Hintergrund weiter.
  4. „Erneut verbinden bei Verbindungsverlust" an, Verzögerung 2 s.
  5. Einpassen: markieren, Strg+E, Begrenzungstyp „Innen anpassen".
  6. Nicht benötigte Kameras auf unsichtbar stellen (Auge), nicht löschen.

Prüfliste beim Paketbau — die Fehler vom Austrian Cup gehören dazu: Replay-Ordner je Matte richtig? Hat Cams eine sichtbare Quelle? Zeigt ReplayInput.source darauf? Steht irgendwo noch eine Adresse des Vorturniers?

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
35
○ Offen ◇ Ohne Lösung 👤 Gernot (BigBoss)

Testphase Kameras

Was geprüft werden muss:

  • Verzögerung gegen die Mattenkamera — beide nebeneinander im Vorschaubild, eine Bewegung, Unterschied ablesen.
  • Dauerlauf über mehrere Stunden, Handy am Kabel.
  • WLAN-Abriss: Handy kurz in den Flugmodus und zurück. Kommt das Bild von selbst wieder?
  • Zwei Kameras gleichzeitig — ob die Drehscheibe und das Netz das tragen, zeigt sich erst dann.
Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
36
4

Gemeinsame Oberfläche: Stream-Regie

Ausbau der Capt-Einstiegsseite zu einem Rahmen um alle Werkzeuge, mit einer Kopfzeile die zeigt wo es klemmt.

0 von 5 gelöst 0 % 5 noch offen
0 gelöst 5 offen ◇ 5 ohne eingetragene Lösung

Das Ziel

Eine Adresse für den Turniertag. Statt sieben Lesezeichen und vier Fenstern eine Oberfläche, die zeigt, wie es um alles steht, und von der aus sich alles bedienen lässt.

Es gibt bereits einen Vorläufer: die Einstiegsseite des Capt-Servers (capt-start/index.php, CAPTSTART-V1) mit drei Kacheln — Stream Dashboard, Verbindungsmanager, Regie-Dashboard. Sie prüft sogar, ob die verlinkten Seiten existieren. Die Stream-Regie ist der Ausbau dieser Seite, kein Neuanfang daneben.

Was hineingehört — alles davon existiert bereits oder entsteht in den Punkten 1 bis 3 und 6:

  • Regie-Dashboard (Replays sichten und ausspielen)
  • Master-Monitor / Dashboard (Kanäle, Klickzahlen, Kurzlinks)
  • Verbindungsmanager (netz/index.php) — welches Gerät antwortet und wie man draufkommt. Am Turniertag das Werkzeug, mit dem man herausfindet, warum eine Matte schweigt.
  • AVI-Mover-Steuerzentrale (Punkt 1)
  • Hallenmikrofon (Punkt 2)
  • Hallenkameras (Punkt 3)
  • OBS-Fernsteuerung mit Setup (Punkt 6)
  • Overlay-Docks je Matte
  • Matten-Status-Board

Der eigentliche Zweck ist nicht die Sammlung, sondern die Kopfzeile: eine Zeile je Matte, die zeigt, ob Kamera, Ton, Replay, Mover und Stream zusammenpassen. Die Fehler am Austrian Cup saßen alle an den Nahtstellen — jedes Werkzeug für sich meldete „in Ordnung".

Der Verbindungsmanager ist dabei die Ebene darunter: Wenn die Kopfzeile sagt „Matte 3 antwortet nicht", beantwortet er die nächste Frage — liegt es am Rechner, am Netz oder am Programm.

37

Bauart: Rahmen statt Neubau

Kein Neubau. Ein Rahmen um das, was schon läuft. Die Werkzeuge bleiben eigenständige Seiten; die Regie bettet sie ein und legt eine gemeinsame Kopfzeile darüber. So bleibt jedes Werkzeug auch einzeln aufrufbar — wichtig, wenn mal etwas klemmt.

Die Falle beim Einbetten, und zwar eine, die uns schon zweimal getroffen hat: Ein eingebettetes Fenster zeigt „Verbindung abgelehnt", wenn die eingebettete Seite es nicht erlaubt. Das ist kein Netzproblem, sondern X-Frame-Options beziehungsweise frame-ancestors. Jede Seite, die in die Regie soll, muss das Einbetten durch die Regie ausdrücklich zulassen.

Zwei Welten, ein Rahmen: Die Regie läuft lokal auf dem Capt-Server. Werkzeuge, die auf dem Hetzner liegen (Overlay-Docks, JEM-Seiten), werden von dort geholt — fällt das Internet in der Halle aus, müssen die örtlichen Werkzeuge weiterlaufen. Die Kopfzeile muss deshalb sagen, welcher Teil gerade nicht erreichbar ist, statt leer zu bleiben.

38
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Rahmen und Kopfzeile bauen

Eine Seite auf dem Capt-Server: oben die Zustandszeile je Matte, darunter Reiter für die Werkzeuge. Jedes Werkzeug in einem eingebetteten Fenster, dazu ein Knopf „in eigenem Fenster öffnen".

Die Zustandszeile holt ihre Angaben aus den Quellen, die es schon gibt: status.json der Mover, OBS per WebSocket, MediaMTX-API, Regie-Queue.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
39
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Einbetten erlauben

Für jede Seite, die in die Regie soll, das Einbetten freigeben. Die örtlichen Werkzeuge unter Abyss (Dashboard, Verbindungsmanager, Regie-Dashboard) genauso wie die vom Hetzner geholten.

🔧 Von Hand, ohne Cowork

Serverseitig, in der nginx-Konfiguration des jeweiligen Bereichs:

add_header Content-Security-Policy
  "frame-ancestors 'self' https://capt-server-1" always;

Ein etwa vorhandener X-Frame-Options-Kopf muss weg — er ist älter und strenger und gewinnt im Zweifel.

  1. Datei unter /etc/nginx/sites-available/ bearbeiten.
  2. nginx -t — erst prüfen, dann laden.
  3. systemctl reload nginx
  4. Im Browser der Regie nachsehen: Erscheint die Seite im Fenster? Bleibt es leer, in den Entwicklerwerkzeugen unter „Konsole" nachlesen — dort steht der Grund im Klartext.
Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
40
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

OBS-Fernsteuerung einbauen

Vier WebSocket-Verbindungen aus der Regie-Seite heraus, direkt zu den Instanzen. Kein Server-Prozess dazwischen nötig.

Erster Anwendungsfall ist der Fehler vom Austrian Cup: Quelleneinstellungen und Transformationen an alle vier Matten gleichzeitig, mit eingesetzter Mattennummer.

🔧 Von Hand, ohne Cowork

Falls die Regie ausfällt, geht dasselbe am einzelnen Rechner:

  1. In OBS Werkzeuge → WebSocket-Servereinstellungen — dort stehen Port (voreingestellt 4455) und Passwort.
  2. Quelle markieren, Strg+E für die Transformation.
  3. Quelleneinstellungen per Doppelklick auf die Quelle.

Die Maße, die am Austrian Cup galten, stehen in den Projektunterlagen: Replay-Fenster 54|210 528×297 und 606|210 1248×702, Pause und Vorlauf 54|198 1008×567, jeweils „Innen anpassen".

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
41
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Verhalten bei Ausfall festlegen

Die Regie darf nicht stehenbleiben, wenn ein Teil fehlt. Für jede Quelle gilt: erreichbar, veraltet oder weg — und das sichtbar, nicht als leere Fläche.

Vorbild ist die bestehende Regel für veraltete Zustände: Was älter als zwei Minuten ist, gilt als „Zustand unbekannt" und wird nicht mehr als gültig angezeigt.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
42
○ Offen ◇ Ohne Lösung 👤 Gernot (BigBoss)

Abnahme am Trockenlauf

Einen vollständigen Aufbau durchspielen, ohne Turnier: vier Matten, Mikrofon, eine Hallenkamera. Dabei bewusst Dinge kaputtmachen — Netzwerkkabel ziehen, eine OBS-Instanz schließen, den Mover beenden — und prüfen, ob die Regie das sagt.

Was dabei auffällt, kommt als Kommentar an die Punkte hier.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
43
5

Dashboard an die neue Technik anpassen

Ton und Hallenkameras laufen künftig über MediaMTX statt RTMP — das Dashboard muss das sehen und von dort aus steuerbar machen.

0 von 7 gelöst 0 % 7 noch offen
0 gelöst 7 offen ◇ 7 ohne eingetragene Lösung

Das Ziel

Das Dashboard auf dem Capt-Server zeigt heute, was über RTMP läuft. Mit Punkt 2 und 3 wechselt die Technik unter Ton und Hallenkameras — MediaMTX statt MonaServer, WebRTC statt RTMP. Das Dashboard muss das mitbekommen, sonst zeigt es grün, wo nichts mehr fließt.

Was sich ändert:

  • Die Zustandsabfrage. Bisher über den RTMP-Server, künftig über die MediaMTX-API — sie sagt je Pfad, ob jemand sendet und wie viele zuhören.
  • Die Quellenarten. Ein Kanal kann nun RTMP, SRT oder WebRTC sein; das Dashboard sollte sagen, welche.
  • Die Gerätezählung aus dem Event-Manager (device_counts in der Bridge: hall_mic, hall_cam …) bleibt, aber was dahintersteht, ist nicht mehr dasselbe.

Wichtig für die Übergangszeit: Solange MonaServer als Rückfall steht (Punkt 2), muss das Dashboard beide Wege anzeigen können — und auseinanderhalten, welcher gerade trägt.

44

Die MediaMTX-API als neue Quelle

MediaMTX bringt eine Abfrageschnittstelle mit. Sie ist der Ersatz für das Mitlesen am RTMP-Server:

http://capt-server-1:9997/v3/paths/list

Die Antwort nennt je Pfad, ob eine Quelle sendet (ready), seit wann, und wie viele Empfänger daranhängen. Genau die drei Angaben, die das Dashboard je Kachel braucht.

Daraus lässt sich etwas bauen, was es bisher nicht gab: die Unterscheidung zwischen „niemand sendet" und „es sendet jemand, aber niemand hört zu". Heute sieht beides gleich aus — und das zweite ist der Fall, bei dem in OBS die Quelle fehlt.

45
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

MediaMTX-API im Dashboard anzapfen

Abfrage je Pfad, daraus die Kachelzustände. Takt wie bisher, damit nicht mehr Last entsteht als nötig.

🔧 Von Hand, ohne Cowork
  1. Prüfen, ob die API überhaupt antwortet — im Browser auf dem Capt-Server:
    http://localhost:9997/v3/paths/list
    Kommt nichts, in der mediamtx.yml api: yes setzen und den Dienst neu starten.
  2. Die Antwort ist JSON. Je Eintrag zählen: name, ready, readers.
  3. Im Dashboard dieselbe Stelle erweitern, die heute den RTMP-Zustand holt.

Von außen nicht erreichbar machen. Die API kann mehr als lesen — sie gehört an localhost gebunden oder in der Firewall gesperrt.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
46
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

Quellenart je Kanal anzeigen

Eine kleine Marke an der Kachel: RTMP, SRT oder WebRTC. Damit beim Hinsehen klar ist, welcher Weg gerade trägt — gerade in der Übergangszeit, in der beide stehen.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
47
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

Setup um Geräte-Kacheln erweitern

Die Überwachungskacheln im Dashboard gibt es schon — für Kanäle mit Video-Kennung und Plattform. Für Mikrofon und Hallenkameras passt dieses Setup nicht: Sie haben keine Video-Kennung, keinen Kanal und keine Klickzahl. Sie haben einen Pfad, eine Art und eine Liste von Matten, die sie abrufen sollen.

Also eine zweite Kachelart im Setup, nicht die bestehende verbiegen:

Kanal-Kachel (vorhanden)Geräte-Kachel (neu)
KennungVideo-IDMediaMTX-Pfad
ArtYouTube / SETVKamera / Mikrofon
Zustand ausYouTube-API:9997/v3/paths/list
Grün heißtsendetsendet und wird abgerufen
ZusätzlichKlickzahlenwelche Matten abrufen

Der Unterschied bei „grün" ist der wichtige. Bei einem Kanal genügt, dass er sendet. Bei einer Hallenkamera nicht — sie kann senden, ohne dass eine einzige Matte sie zeigt. Die Kachel muss beides führen, sonst meldet sie Betrieb, wo nichts ankommt.

Woher die Kacheln kommen: dieselben drei Wege wie beim Rest — Bridge-Pull aus dem Event-Manager (device_counts sagt, wie viele Hallenkameras und Mikrofone vorgesehen sind), JSON-Import, oder von Hand angelegt. Die Zuordnung Gerät → Pfad → Matten entsteht vor Ort und darf vom nächsten Pull nicht überschrieben werden.

Keine feste Zahl. Heute fünf Kameras und ein Mikrofon; beim nächsten Turnier zwei Kameras und keins. Die Kachelzahl kommt aus dem Setup.

🔧 Von Hand, ohne Cowork

Geräte-Kachel ohne JEM anlegen:

  1. Dashboard → Setup → Kachel hinzufügen → Art Gerät.
  2. Eintragen: Name (Siegerehrung), Pfad (kamera-siegerehrung), Art (Kamera), und welche Matten sie abrufen sollen.
  3. Speichern, dann prüfen: Die Kachel muss grau sein, solange niemand sendet — nicht rot. Rot ist für „sollte senden, tut es aber nicht".

Pfadnamen genau übernehmen, Groß- und Kleinschreibung zählt. Ein Tippfehler sieht aus wie „sendet nicht".

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
48
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

Verbindungsmanager: Setup, Modal, Schalter

Festlegung Gernots (04.10.2026): Der Verbindungsmanager kommt ins Dashboard — mit eigenem Setup, Modal zum Bedienen und einem Schalter, ob der Knopf überhaupt erscheint.

Das Setup im Dashboard braucht:

  • Wo er liegt — Pfad oder Adresse des Verbindungsmanagers (voreingestellt netz/ neben dem Dashboard).
  • Update holen — Knopf, der das aktuelle Paket vom Baukasten zieht (werkstatt.judo-fanpage.net/netz/) und auspackt. Braucht Internet; ohne Verbindung sagt er das, statt stumm zu scheitern.
  • Anzeigen ja/nein — ein Schalter, ob der Knopf im Dashboard erscheint. Nicht jede Veranstaltung braucht ihn.

Bedient wird im Modal, eingebettet als iFrame. Das geht hier reibungslos: Dashboard und Verbindungsmanager liegen beide unter Abyss auf demselben Rechner — gleiche Herkunft, also keine Sperre durch X-Frame-Options. Die Falle, die uns bei den Hetzner-Werkzeugen zweimal getroffen hat, greift hier nicht.

Aussehen: eigener Rahmen wie die übrigen Bereiche, mit Symbol und Akzentfarbe in der Art der Landingpage-Kachel. Alternativ vor der Aggregation einsortieren — beides vertretbar, Gernot entscheidet beim Hinsehen.

Warum das lohnt: Wenn eine Matte schweigt, ist die nächste Frage immer dieselbe — antwortet der Rechner überhaupt? Heute wechselt man dafür das Fenster. Mit dem Modal bleibt das Dashboard stehen und läuft weiter.

🔧 Von Hand, ohne Cowork

Solange das Modal nicht da ist, geht die Diagnose so:

  1. Zweites Browserfenster, https://capt-server-1/netz/.
  2. Gerät in der Liste suchen, Zustand ablesen, „prüfen" drücken.
  3. Antwortet es nicht, am Capt-Server nachsehen:
    ping LAPTOP-STREAM-3
    Test-NetConnection LAPTOP-STREAM-3 -Port 4455

Reihenfolge beim Suchen: erst ob der Rechner antwortet, dann ob der Dienst antwortet. Ein Rechner, der auf ping nicht reagiert, hat kein OBS-Problem.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
49
○ Offen ◇ Ohne Lösung 👤 Claude-CAPT (UnterBoss)

Kameras und Mikrofon als Modal steuern

Kameras und Mikrofon aus dem Dashboard heraus prüfen und steuern — als Modal, ohne die Seite zu verlassen.

Der eigentliche Gewinn: hinsehen und hinhören, ohne OBS. MediaMTX kann im Browser wiedergeben. Das Modal zeigt also das Kamerabild selbst und beim Mikrofon einen Pegel — direkt von der Quelle. Damit ist die Frage „liegt es an der Kamera oder an OBS?" in zwei Sekunden beantwortet, statt dass jemand an eine Matte läuft.

Zwei Ebenen, die das Modal auseinanderhalten muss:

EbeneWas man siehtWas man tun kann
Quelle (MediaMTX) sendet jemand? seit wann? wie viele hören zu? Pfad zurücksetzen, verkabelte Kamera neu einlesen lassen
Wiedergabe (OBS) zeigt die Matte die Quelle? ist sie stumm? sichtbar/unsichtbar, stumm, Pegel — über WebSocket (Punkt 6)

Warum das zusammengehört: Eine Kamera, die sendet und die niemand abruft, sieht im Dashboard heute genauso aus wie eine, die nicht sendet. Mit beiden Ebenen nebeneinander ist der Unterschied sofort da — und das ist genau der Fall, in dem in OBS die Quelle fehlt.

Je Gerät eine Zeile, und darunter die Matten, die es abrufen. Beim Hallenmikrofon also fünf Zeilen auf einen Blick: die Quelle und vier Matten, die sie hören — oder eben nicht.

Modal, kein neuer Tab. Das Dashboard bleibt im Hintergrund stehen und läuft weiter.

🔧 Von Hand, ohne Cowork

Solange das Modal fehlt, prüft man es so:

  1. Sendet die Quelle? Im Browser auf dem Capt-Server:
    http://localhost:9997/v3/paths/list
    Beim gesuchten Pfad auf ready und readers achten.
  2. Kommt ein Bild an? MediaMTX gibt im Browser wieder:
    http://capt-server-1:8889/kamera-siegerehrung
    Sieht man hier das Bild, liegt es nicht an der Kamera.
  3. Hört die Matte zu? In der jeweiligen OBS-Instanz nachsehen, ob die Medienquelle sichtbar und nicht stumm ist.

Die Reihenfolge nicht umdrehen. Wer in OBS anfängt, sucht den Fehler oft an der falschen Stelle — erst die Quelle, dann die Wiedergabe.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
50
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Gerätezählung prüfen

Die Bridge liefert device_counts aus dem Event-Manager (Hallenkameras, Mikrofone, Zusatzkameras). Prüfen, ob die Begriffe noch passen, wenn eine „Hallenkamera" künftig ein Handy mit Larix sein kann.

Gegebenenfalls ein Feld für die Art ergänzen — aber erst, wenn Punkt 3 entschieden ist. Vorher wäre es geraten.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
51
○ Offen ◇ Ohne Lösung 👤 Gernot (BigBoss)

Abnahme Dashboard

Mit laufendem Ton und einer Hallenkamera: Zeigt das Dashboard beide? Was passiert, wenn der Sender aufhört — wird es rot, und wie schnell? Und der Fall, der heute nicht erkennbar ist: Sender läuft, aber keine OBS-Instanz hört zu.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
52
6

OBS-Quellen über WebSocket ändern

Jede laufende Instanz von außen anpassen — Quellen, Einstellungen, Lage im Bild. Einzeln oder an allen vier Matten gleichzeitig.

0 von 6 gelöst 0 % 6 noch offen
0 gelöst 6 offen ◇ 6 ohne eingetragene Lösung

Das Ziel

Jede laufende OBS-Instanz muss sich von außen anpassen lassen — Quellen, deren Einstellungen und deren Lage im Bild, einzeln oder an allen vier Matten gleichzeitig.

Der Anlass steht im Protokoll des Austrian Cup: In allen acht Paketen stand derselbe Replay-Ordner. Die Korrektur kostete einen Gang zu jeder Matte, mitten im Betrieb. Dasselbe bei den Fenstermaßen im Replay, bei der leeren Szene Cams, bei der Pause-Szene mit Begrenzung 0×0. Jedes Mal vier Mal dasselbe von Hand.

WebSocket ist hier der richtige Weg, anders als beim AVI-Mover: OBS bringt obs-websocket ab Werk mit, Port 4455. Das ist die eingebaute Schnittstelle, kein Nachbau — und sie kann mehr als nur Szenen umschalten.

Kein Server-Prozess nötig. Eine HTML-Seite auf dem Capt-Server hält vier Verbindungen gleichzeitig und spricht jede Instanz direkt an.

53

Was sich ändern lässt

Was sich damit ändern lässt — geordnet danach, was uns tatsächlich gekostet hat:

WasAufrufAnlass
QuelleneinstellungenSetInputSettings Replay-Ordner und Dateimuster je Matte, Puffer-Dauer, Quellszene, Adresse einer Medienquelle, Stream-Key
Lage im BildSetSceneItemTransform Fenstermaße in Replay, Pause, Vorlauf — Position, Begrenzung, Begrenzungstyp
SichtbarkeitSetSceneItemEnabled Hallenkamera an- oder abschalten (Punkt 3)
ReihenfolgeSetSceneItemIndex HDMI-Scoreboard saß am Austrian Cup ganz hinten
Browser-Quelle neu ladenPressInputPropertiesButton nach jeder Overlay-Änderung im Studio
Szene wechselnSetCurrentProgramScene Pause an alle, Vorlauf an alle
TonSetInputMute, SetInputVolume Hallenmikrofon auf allen Matten gleichzeitig
BildschirmfotoGetSourceScreenshot alle vier Matten als Vorschaukacheln auf einer Seite
Zustand lesenGetSceneItemList u. a. prüfen, was tatsächlich läuft

Das Bildschirmfoto ist vermutlich das Wertvollste — vier Kacheln nebeneinander zeigen auf einen Blick, wo eine Matte schwarz läuft. Heute erfährt man das vom Zuschauer.

54

Global, Gruppe, einzeln — mit Rücksicht auf die Matte

Drei Reichweiten, immer sichtbar vor dem Senden:

  • Einzeln — eine Instanz, etwa wenn an Matte 3 etwas verstellt ist.
  • Gruppe — freie Auswahl per Haken. Etwa „alle Matten von Tag 2" oder „Matte 1 und 2", wenn nur die beiden eine Hallenkamera zeigen.
  • Global — alle verbundenen Instanzen.

Und hier liegt die eigentliche Schwierigkeit: Ein Befehl an alle darf nicht überall denselben Wert setzen. Genau das war der Fehler am Austrian Cup — in allen acht Paketen stand Judo Matte 1, und Matte 2 bis 4 schrieben ihre Replays in den Ordner von Matte 1.

Also: Platzhalter statt fester Werte. Der Befehl trägt {matte}, jede Instanz setzt ihre eigene Nummer ein:

An alle:   D:\Replay Aufnahmen\Judo Matte {matte}
Matte 1 →  D:\Replay Aufnahmen\Judo Matte 1
Matte 2 →  D:\Replay Aufnahmen\Judo Matte 2

Gebraucht werden mindestens {matte}, {tag} und {event}. Woher die Instanz ihre Nummer kennt, muss festgelegt werden — aus dem Namen der Szenensammlung, aus dem Rechnernamen oder aus einer Angabe in der Verbindung.

Zwei Arten von Werten, die man nicht verwechseln darf:

Gleich für alleJe Matte verschieden
Turniername, Tageswechsel, Pausenszene, Stummschaltung des Hallenmikrofons, Overlay neu laden Replay-Ordner und Dateimuster, Stream-Key, Mattenbezeichnung, Overlay-Adresse (&matte=)

Der Stream-Key ist der gefährlichste Fall. Vier Instanzen mit demselben Key senden alle auf denselben YouTube-Stream — drei Matten sind dann weg, und zwar sofort. Felder dieser Art gehören gesperrt für Global-Befehle, außer sie enthalten einen Platzhalter. Nicht als Warnung, sondern als Sperre.

Vorschau vor dem Senden. Die Oberfläche zeigt je ausgewählter Instanz, welcher Wert dort ankommt — ausgeschrieben, mit eingesetzten Platzhaltern. Wer das sieht, erkennt den Austrian-Cup-Fehler in einer Sekunde.

55

Setup: Matten, Rechner, Geräte

Wie im Dashboard: ein Setup, das der JEM vorgeben kann — und das sich von Hand anpassen oder ganz neu anlegen lässt.

Darin steht je Matte, welcher Rechner sie fährt und welche Geräte daran hängen. Daraus ergibt sich alles Weitere: die Zuordnung Instanz ↔ Matte, die Einsetzung von {matte}, und welche Quellen es auf dieser Matte überhaupt gibt.

FeldBeispielWoher
Mattennummer1JEM / von Hand
RechnerLAPTOP-STREAM-1von Hand
WebSocket-Port4455fest, änderbar
Stream-Keyaus event_streamsJEM
Geräte an dieser MatteKamera, Replay, Hallenkamera ja/nein JEM / von Hand

Keine feste Mattenzahl. Vier war der Austrian Cup; ein Ligakampftag hat eine, das JTFO-Herbstfinale hatte neun. Die Zahl kommt aus dem Setup oder aus der Bridge — nirgends im Programm.

Damit ist auch geklärt, woher die Mattennummer kommt: aus dem Setup, nicht aus der Instanz. Die Instanz muss nichts über sich wissen; die Zentrale weiß, mit wem sie spricht.

56

Vorgabe aus dem JEM — Bridge oder JSON

Derselbe Weg wie beim Dashboard — nicht ein zweiter danebengebaut:

  1. Bridge-Pull. Der Capt-Server holt die Konfiguration aus dem Event-Manager (capt_export.php, Schema judo-capt-config). Dort stehen bereits mats (Mattenzahl), channels[] (je Matte Kanal und Video-Kennung) und device_counts (Hallenkameras, Mikrofone, Zusatzkameras). Seit 04.10. zusätzlich shlink mit den Kurzlinks.
  2. JSON-Import. Dieselbe Antwort als Datei einspielen — für den Fall, dass in der Halle kein Internet ist. Läuft durch dieselbe Verarbeitung.
  3. Von Hand. Setup anlegen oder ändern, ohne JEM. Muss vollständig möglich sein, nicht als Notbehelf.

Was in der Bridge noch fehlt: der Rechnername je Matte. Den kennt der JEM nicht — er kommt aus dem Setup vor Ort und bleibt dort. Beim nächsten Pull darf er nicht überschrieben werden.

Daraus folgt eine Regel für den Pull: Was der JEM weiß (Mattenzahl, Keys, Geräte), kommt von dort. Was nur vor Ort bekannt ist (Rechnernamen, Ports, Passwörter), bleibt stehen. Ein Pull, der die örtliche Einrichtung mitlöscht, wird nach einmal Ärger nie wieder benutzt.

57

Was vorher zu klären ist

Was vor dem Bauen geklärt sein muss:

Anmeldung. obs-websocket v5 verlangt ein Passwort und rechnet eine Prüfsumme über eine Zufallszahl. In allen Paketen steht dasselbe Passwort — bequem, aber jeder im Hallennetz kann damit auf jede Instanz. Für ein geschlossenes Netz vertretbar; es gehört trotzdem entschieden, nicht nebenbei festgelegt.

Erreichbarkeit. Die Instanzen heißen LAPTOP-STREAM-1 bis -4. Namensauflösung im Hallennetz oder feste Adressen? Wenn der Name mal nicht geht, muss die Oberfläche das sagen und nicht endlos warten.

Teiltreffer. Was ist, wenn ein Befehl an drei Matten ankommt und an der vierten nicht? Das darf nicht aussehen wie Erfolg. Je Matte eine Rückmeldung, und wer nicht geantwortet hat, steht rot da.

Schutz im laufenden Betrieb. Eine Transformation an allen vier Matten gleichzeitig ist im Zweifel ein Fehler, der alle vier trifft. Für Eingriffe, die das Bild verändern, braucht es eine Rückfrage — und für die, die eine sendende Matte stören könnten, die Warnung, dass sie gerade sendet.

Rückweg. Vor jeder Änderung den alten Wert lesen und merken. Ein Knopf „zurück" ist am Turniertag mehr wert als jede Vorschau.

58
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Verbindung zu allen Instanzen

Eine Verbindung je Matte aus dem Setup heraus, Anmeldung nach v5, Zustand je Instanz sichtbar: verbunden, kein Passwort, nicht erreichbar.

🔧 Von Hand, ohne Cowork

Prüfen, ob eine Instanz überhaupt erreichbar ist:

  1. In OBS auf dem Laptop: Werkzeuge → WebSocket-Servereinstellungen. Dort stehen Port (voreingestellt 4455) und das Passwort, und ob der Server überhaupt an ist.
  2. Vom Capt-Server aus die Erreichbarkeit prüfen:
    Test-NetConnection LAPTOP-STREAM-1 -Port 4455
    TcpTestSucceeded : True heißt, der Weg steht.
  3. Schlägt es fehl: Windows-Firewall auf dem Laptop — OBS braucht die Freigabe für private Netze.
Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
59
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Quellen ändern — einzeln, Gruppe, global

Die Befehle aus der Tabelle, für alle drei Reichweiten. Platzhalter ({matte}, {tag}, {event}) werden je Instanz eingesetzt; Felder ohne Platzhalter, die je Matte verschieden sein müssen, sind für Global-Befehle gesperrt. Vorschau vor dem Senden, alter Wert für den Rückweg.

🔧 Von Hand, ohne Cowork

Dasselbe am einzelnen Rechner, wenn die Fernsteuerung ausfällt:

  • Quelleneinstellungen: Doppelklick auf die Quelle.
  • Lage im Bild: Quelle markieren, Strg+E.
  • Reihenfolge: in der Quellenliste ziehen — oben in der Liste ist vorne im Bild.
  • Transformation übertragen: Rechtsklick → Transformieren → Transformation kopieren, dann bei der anderen Quelle einfügen.

Die Maße vom Austrian Cup, falls wieder gebraucht:

Replay   Cams          54 | 210    innen anpassen    528 ×  297
Replay   ReplayInput  606 | 210    innen anpassen   1248 ×  702
Pause    Setup         54 | 198    innen anpassen   1008 ×  567
Vorlauf  dito          54 | 198    innen anpassen   1008 ×  567
Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
60
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Vorschaukacheln aller Matten

Je Instanz ein Bildschirmfoto im Takt, vier Kacheln nebeneinander. Damit sieht man eine schwarze Matte, bevor es jemand meldet.

Takt niedrig halten — jedes Bild kostet die Instanz Rechenzeit, und die braucht sie fürs Senden.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
61
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Rückfrage und Rückweg

Eingriffe, die das Bild verändern, hinter eine Rückfrage. Sendende Matten kennzeichnen. Je Änderung den vorherigen Wert behalten und einen Knopf „zurück" anbieten.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
62
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Setup bauen

Setup-Seite mit Bridge-Pull, JSON-Import und Handarbeit. Mattenzahl frei, je Matte Rechner, Port, Geräte. Örtliche Angaben überleben den Pull.

🔧 Von Hand, ohne Cowork

Setup ohne JEM anlegen:

  1. In der Fernsteuerung Setup → Matte hinzufügen.
  2. Je Matte eintragen: Nummer, Rechnername, Port (4455), Passwort.
  3. Erreichbarkeit prüfen — der Knopf neben jeder Zeile meldet verbunden oder den Grund.
  4. Speichern. Das Setup liegt als Datei auf dem Capt-Server und übersteht einen Neustart.

Rechnername unbekannt? Auf dem Laptop:

hostname
Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
63
○ Offen ◇ Ohne Lösung 👤 Gernot (BigBoss)

Abnahme

Im Trockenlauf mit vier Instanzen: Replay-Ordner an alle setzen, Fenstermaße an alle, eine Hallenkamera an- und abschalten, Pause an alle. Dann eine Instanz schließen und denselben Befehl nochmal — die Oberfläche muss sagen, welche gefehlt hat.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
64
7

Leitungstester

Misst die Leitung und sendet zur Probe echt auf den Kanal. PowerShell, bleibt lokal — bekommt Profile und Ergebnisablage aus dem JEM.

0 von 6 gelöst 0 % 6 noch offen
0 gelöst 6 offen ◇ 6 ohne eingetragene Lösung

Was wir heute haben

Gelesen aus LeitungsTester.zip (Dropbox, 01 - Livestreams Aktuell). PowerShell mit Oberfläche, Fassung 22.2 „Event-Stable", 414 Zeilen, dazu speedtest.exe und ein eigenes ffmpeg.exe (83 MB).

Zwei Messungen, und die zweite ist die wertvolle:

  1. Leitungstest — speedtest.exe, drei Läufe mit je 15 s Pause, daraus der Mittelwert für Ping, Download und Upload. Das sagt, was die Leitung grundsätzlich hergibt.
  2. Pre-Flight — holt über die YouTube-API die echten Stream-Schlüssel des Kanals (liveStreams) und startet je Matte einen ffmpeg-Prozess, der wirklich sendet. Das ist kein Rechenexempel, sondern der Ernstfall ohne Publikum.

Event-Profile liegen als JSON daneben — ITG-2025.json etwa mit Mattenzahl, Infokanal und den geplanten Bitraten. Die Protokolle je Kanal (ffmpeg_logs/Matte_1_100818.log …) zeigen einen Lauf mit neun Matten plus Infokanal.

Warum das Werkzeug zählt: Es beantwortet vor dem Turnier die Frage, die sonst erst beim ersten Kampf auffällt — trägt diese Halle, was wir vorhaben? Und es beantwortet sie mit echten Streams auf dem echten Kanal.

65

Zugangsdaten im Klartext

In config.json stehen Zugangsdaten im Klartext: OAuth-Client-Kennung und -Geheimnis, ein OAuth-Refresh-Token, der YouTube-API-Schlüssel und der Shlink-API-Schlüssel.

Ein Refresh-Token ist kein Passwort auf Zeit — damit lässt sich dauerhaft ein neues Zugangsmerkmal holen. Wer die Datei hat, kann auf dem Kanal senden.

Das Paket liegt derzeit offen in der Dropbox. Das ist kein Weltuntergang und war im geschlossenen Kreis praktikabel — aber bevor das Werkzeug in die Werkzeugsammlung wandert und dabei kopiert wird, gehört geklärt: Wer bekommt die Datei, und reicht statt des Refresh-Tokens nicht ein Stream-Schlüssel aus dem JEM?

Mein Vorschlag: Die Schlüssel kommen aus dem Event-Manager, wo sie ohnehin gepflegt werden (yt_stream_keys, event_streams). Dann braucht der Leitungstester keinen eigenen Zugang zur YouTube-API — und die Datei verliert ihre Brisanz.

66

Wie es in die Werkzeuge kommt

Das Werkzeug bleibt lokal. Es misst die Leitung an dem Ort, an dem gestreamt wird, und sendet dafür echte Daten — vom Server aus ist beides sinnlos. Dieselbe Lage wie beim Verbindungsmanager.

Was dazukommen soll:

  • Ausliefern über den Baukasten, wie beim Netz-Werkzeug: vorab einrichten, als Paket ziehen, am Zielrechner auspacken. Dann liegt nicht auf jedem Laptop eine andere Fassung.
  • Ergebnisse auf den Server. Heute bleibt die Messung im Fenster und in lokalen Protokollen. Sie gehört zum Event — Datum, Halle, Mattenzahl, gemessener Upload, Ergebnis des Pre-Flight. Dann lässt sich beim nächsten Mal nachsehen, was diese Halle letztes Jahr hergab.
  • Profil aus dem JEM. Mattenzahl, Infokanal und Bitraten stehen dort schon. Ein Event auswählen statt ein JSON von Hand anlegen.
  • Später: Fernstart über denselben Befehlsweg wie der AVI-Mover (Punkt 1). Dann lässt sich die Messung aus der Stream-Regie anstoßen.

Was ausdrücklich nicht dazukommt: eine Bewertung der gemessenen Werte. Das Werkzeug misst und zeigt; ob eine Leitung für neun Matten reicht, entscheidet Gernot.

67
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Werkzeug sichten und ablegen

Den PowerShell-Quelltext durchgehen, Fassung festhalten, in die Werkzeugsammlung aufnehmen. Prüfen, was sich ohne Umbau sofort nutzen lässt.

🔧 Von Hand, ohne Cowork
  1. ZIP auspacken nach D:\Leitungstester — alles in einen Ordner, das Werkzeug sucht speedtest.exe, ffmpeg.exe, config.json und key_assignments.json neben sich.
  2. LeitungsTester.exe starten (oder die .ps1, dann entfällt die Selbstprüfung).
  3. Erst „Leitungstest" — drei Läufe, dauert mit den Pausen gut zwei Minuten.
  4. Dann „Pre-Flight" — sendet echt auf den Kanal. Nicht während einer laufenden Veranstaltung.
Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
68
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Schlüssel aus dem JEM statt eigener Zugang

Statt OAuth-Refresh-Token im Werkzeug: die Stream-Schlüssel des Events aus dem Event-Manager holen. Dieselbe Quelle, die auch die OBS-Pakete versorgt.

Damit entfällt der eigene YouTube-Zugang — und die Datei mit den Zugangsdaten verliert ihre Brisanz.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
69
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Event-Profil aus dem JEM

Mattenzahl, Infokanal und geplante Bitraten stehen im Event. Ein Event auswählen statt ein JSON von Hand pflegen — die Profile wie ITG-2025.json entstehen dann von selbst.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
70
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Messungen zum Event ablegen

Nach jeder Messung Datum, Ort, Mattenzahl, Ping, Download, Upload und das Ergebnis des Pre-Flight an den Server. Angehängt an das Event, damit beim nächsten Mal in derselben Halle nachlesbar ist, was sie hergab.

Keine Bewertung, keine Ampel — nur die Zahlen und wer sie wann gemessen hat.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
71
○ Offen ◇ Ohne Lösung 👤 Claude-Hetzner (Boss)

Über den Baukasten ausliefern

Wie beim Netz-Werkzeug: vorab einrichten, Paket ziehen, am Zielrechner auspacken. Mit der Frage, ob die Zugangsdaten mitgehen sollen — standardmäßig nicht.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
72
○ Offen ◇ Ohne Lösung 👤 Gernot (BigBoss)

Erprobung

In einer Halle vor dem Turnier: Leitungstest, dann Pre-Flight mit der geplanten Mattenzahl. Prüfen, ob das Ergebnis zu dem passt, was am Turniertag tatsächlich lief — erst das macht die Messung glaubwürdig.

Noch keine Lösung eingetragen. Was hier steht, ist die Einschätzung — nicht, wie es gelöst wurde.
73