Alle Werkzeuge unter einem Dach: der Rechner führt aus, eingerichtet und bedient wird zentral.
Ä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.
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.
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.
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.211Die 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 }
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.
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.
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.
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.
Einen Befehl ohne Zentrale absetzen — die Datei einfach selbst schreiben:
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"}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.
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.
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 }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.
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.
Was die Zentrale zeigt, steht auch ohne sie da — nur verstreut:
http://192.168.1.10/avi-mover/matte1/status.jsonDort stehen Zustand, laufende Datei und die Zähler.
<Turnier>__Matte-N.json.Vier Matten heißt vier Browser-Reiter — unbequem, aber vollständig.
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.
AVI-Mover.ps1 und avimover_config.json auf den
Laptop kopieren, in den Ordner des jeweiligen OBS-Pakets.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.
Adresse und Webroot klären, Ordner avi-mover/matteN anlegen,
Schreibrecht prüfen. Dann in die Konfigdatei eintragen.
avi-mover\matte1 avi-mover\matte2 avi-mover\matte3 avi-mover\matte4
echo test > \\rtmp-server-1\www-root\avi-mover\matte1\test.txtKlappt das, wieder löschen.
avimover_config.json als zweite Zentrale
eintragen.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.
Prüfliste zum Abhaken:
Weg vom RTMP-Umweg. Der alte Microphon-Broadcaster wird abgeschafft, nicht ersetzt.
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.
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.
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.
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.
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:
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.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.
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.
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.
C:\MediaMTX. Es ist ein einzelnes Programm, keine Installation.mediamtx.yml mit Notepad öffnen und eintragen:
api: yes apiAddress: 127.0.0.1:9997 paths: hallenmikro:Einrückung mit zwei Leerzeichen, niemals Tabulatoren.
mediamtx.exe doppelklicken — es öffnet ein
Fenster mit Protokoll. Läuft es, als Dienst einrichten (etwa mit
nssm), damit es den Neustart übersteht.http://localhost:9997/v3/paths/list
Startet es nicht, steht im Fenster die Zeilennummer — fast immer ein Tabulator in der YAML.
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.
D:\Stream-Tools-Updater\Zertifikate).mediamtx.yml eintragen:
encryption: optional serverCert: C:\MediaMTX\capt-server-1.crt serverKey: C:\MediaMTX\capt-server-1.key
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.
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).
Ohne die Sender-Seite lässt sich der Ton trotzdem einspeisen — mit ffmpeg vom Rechner, an dem das Mikrofon hängt:
ffmpeg -list_devices true -f dshow -i dummy
ffmpeg -f dshow -i audio="Name des Mikrofons" -c:a aac -b:a 128k -f rtsp rtsp://capt-server-1:8554/hallenmikro
Das ist der Notbehelf, nicht das Ziel: ein Fenster, das jemand offenhalten muss, auf einem bestimmten Rechner. Genau das soll die Seite ablösen.
In einer Instanz die Medienquelle auf MediaMTX umstellen und gegen den MonaServer-Weg vergleichen. Erst danach die übrigen.
srt://capt-server-1:8890?streamid=read:hallenmikroFalls SRT zickt:
rtsp://capt-server-1:8554/hallenmikro
Zurück auf den alten Weg geht jederzeit: Adresse auf die MonaServer-URL ändern, fertig.
Drei Dinge, die wir wirklich prüfen müssen:
Messen statt schätzen:
Drei Zeilen je Versuch notieren. Ohne Notizen bleibt jede Aussage über den Dauerbetrieb geraten.
Alle fünf Kameras müssen in jede OBS-Instanz. Verkabelte liest der Capt-Server ein, kabellose senden selbst — verteilt wird beides gleich.
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.
Alle fünf Kameras gehen über die Drehscheibe. Der Unterschied liegt nur darin, wie sie dorthin kommen — und das entscheidet die Verkabelung:
| Kamera | Anschluss | Weg zur Drehscheibe | Pfad |
|---|---|---|---|
| Hallen-Kamera-1 | Kabel am Capt-Server | Capt-Server liest sie ein und sendet | hallen-kamera-1 |
| Hallen-Kamera-2 | Kabel am Capt-Server | dito | hallen-kamera-2 |
| Hallen-Kamera-3 | Kabel am Capt-Server | dito | hallen-kamera-3 |
| Bewegt-Hallenkamera | kein Kabel | Handy sendet selbst (Larix) | kamera-bewegt |
| Siegerehrung | kein 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.
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.
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.
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.
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.
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.
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.
mediamtx.yml im MediaMTX-Ordner mit Notepad öffnen.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.ffmpeg -list_devices true -f dshow -i dummyDie Namen stehen in Anführungszeichen hinter
DirectShow video devices
— genau so übernehmen, mit Leerzeichen und Bindestrichen.net stop mediamtx net start mediamtx
http://localhost:9997/v3/paths/listBei 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.
Hallen-Kamera-1, -2 und -3 anschließen und prüfen, dass der Capt-Server sie einlesen kann. Das Verteilen übernimmt dann MediaMTX.
ffmpeg -list_devices true -f dshow -i dummy
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.
mediamtx.yml eintragen (siehe Pfade-Aufgabe),
Dienst neu starten.srt://capt-server-1:8890?streamid=read:hallen-kamera-1Falls 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".
Bewegt-Hallenkamera und Siegerehrung über Larix auf die Drehscheibe.
rtmp://capt-server-1:1935/kamera-bewegt rtmp://capt-server-1:1935/kamera-siegerehrungZickt die Namensauflösung im Hallennetz, die IP verwenden — bei RTMP spielt das Zertifikat keine Rolle.
srt://capt-server-1:8890?streamid=read:kamera-siegerehrungFalls 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.
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.
Je Kamera in der Szenensammlung:
srt://capt-server-1:8890?streamid=read:hallen-kamera-1
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?
Was geprüft werden muss:
Ausbau der Capt-Einstiegsseite zu einem Rahmen um alle Werkzeuge, mit einer Kopfzeile die zeigt wo es klemmt.
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:
netz/index.php) — welches Gerät
antwortet und wie man draufkommt. Am Turniertag das Werkzeug, mit dem man
herausfindet, warum eine Matte schweigt.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.
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.
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.
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.
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.
/etc/nginx/sites-available/ bearbeiten.nginx -t — erst prüfen, dann laden.systemctl reload nginxVier 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.
Falls die Regie ausfällt, geht dasselbe am einzelnen Rechner:
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".
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.
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.
Ton und Hallenkameras laufen künftig über MediaMTX statt RTMP — das Dashboard muss das sehen und von dort aus steuerbar machen.
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:
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.
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.
Abfrage je Pfad, daraus die Kachelzustände. Takt wie bisher, damit nicht mehr Last entsteht als nötig.
http://localhost:9997/v3/paths/listKommt nichts, in der
mediamtx.yml api: yes setzen
und den Dienst neu starten.name,
ready, readers.Von außen nicht erreichbar machen. Die API kann mehr als lesen —
sie gehört an localhost gebunden oder in der Firewall gesperrt.
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.
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) | |
|---|---|---|
| Kennung | Video-ID | MediaMTX-Pfad |
| Art | YouTube / SETV | Kamera / Mikrofon |
| Zustand aus | YouTube-API | :9997/v3/paths/list |
| Grün heißt | sendet | sendet und wird abgerufen |
| Zusätzlich | Klickzahlen | welche 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.
Geräte-Kachel ohne JEM anlegen:
Siegerehrung), Pfad
(kamera-siegerehrung), Art (Kamera), und welche Matten sie
abrufen sollen.Pfadnamen genau übernehmen, Groß- und Kleinschreibung zählt. Ein Tippfehler sieht aus wie „sendet nicht".
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:
netz/ neben dem Dashboard).werkstatt.judo-fanpage.net/netz/) und auspackt. Braucht
Internet; ohne Verbindung sagt er das, statt stumm zu scheitern.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.
Solange das Modal nicht da ist, geht die Diagnose so:
https://capt-server-1/netz/.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.
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:
| Ebene | Was man sieht | Was 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.
Solange das Modal fehlt, prüft man es so:
http://localhost:9997/v3/paths/listBeim gesuchten Pfad auf
ready und readers achten.http://capt-server-1:8889/kamera-siegerehrungSieht man hier das Bild, liegt es nicht an der Kamera.
Die Reihenfolge nicht umdrehen. Wer in OBS anfängt, sucht den Fehler oft an der falschen Stelle — erst die Quelle, dann die Wiedergabe.
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.
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.
Jede laufende Instanz von außen anpassen — Quellen, Einstellungen, Lage im Bild. Einzeln oder an allen vier Matten gleichzeitig.
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.
Was sich damit ändern lässt — geordnet danach, was uns tatsächlich gekostet hat:
| Was | Aufruf | Anlass |
|---|---|---|
| Quelleneinstellungen | SetInputSettings |
Replay-Ordner und Dateimuster je Matte, Puffer-Dauer, Quellszene, Adresse einer Medienquelle, Stream-Key |
| Lage im Bild | SetSceneItemTransform |
Fenstermaße in Replay, Pause, Vorlauf — Position, Begrenzung, Begrenzungstyp |
| Sichtbarkeit | SetSceneItemEnabled |
Hallenkamera an- oder abschalten (Punkt 3) |
| Reihenfolge | SetSceneItemIndex |
HDMI-Scoreboard saß am Austrian Cup ganz hinten |
| Browser-Quelle neu laden | PressInputPropertiesButton |
nach jeder Overlay-Änderung im Studio |
| Szene wechseln | SetCurrentProgramScene |
Pause an alle, Vorlauf an alle |
| Ton | SetInputMute, SetInputVolume |
Hallenmikrofon auf allen Matten gleichzeitig |
| Bildschirmfoto | GetSourceScreenshot |
alle vier Matten als Vorschaukacheln auf einer Seite |
| Zustand lesen | GetSceneItemList 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.
Drei Reichweiten, immer sichtbar vor dem Senden:
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 alle | Je 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.
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.
| Feld | Beispiel | Woher |
|---|---|---|
| Mattennummer | 1 | JEM / von Hand |
| Rechner | LAPTOP-STREAM-1 | von Hand |
| WebSocket-Port | 4455 | fest, änderbar |
| Stream-Key | aus event_streams | JEM |
| Geräte an dieser Matte | Kamera, 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.
Derselbe Weg wie beim Dashboard — nicht ein zweiter danebengebaut:
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.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.
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.
Eine Verbindung je Matte aus dem Setup heraus, Anmeldung nach v5, Zustand je Instanz sichtbar: verbunden, kein Passwort, nicht erreichbar.
Prüfen, ob eine Instanz überhaupt erreichbar ist:
Test-NetConnection LAPTOP-STREAM-1 -Port 4455
TcpTestSucceeded : True heißt, der Weg steht.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.
Dasselbe am einzelnen Rechner, wenn die Fernsteuerung ausfällt:
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
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.
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.
Setup-Seite mit Bridge-Pull, JSON-Import und Handarbeit. Mattenzahl frei, je Matte Rechner, Port, Geräte. Örtliche Angaben überleben den Pull.
Setup ohne JEM anlegen:
Rechnername unbekannt? Auf dem Laptop:
hostname
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.
Misst die Leitung und sendet zur Probe echt auf den Kanal. PowerShell, bleibt lokal — bekommt Profile und Ergebnisablage aus dem JEM.
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:
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.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.
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.
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:
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.
Den PowerShell-Quelltext durchgehen, Fassung festhalten, in die Werkzeugsammlung aufnehmen. Prüfen, was sich ohne Umbau sofort nutzen lässt.
D:\Leitungstester — alles in einen
Ordner, das Werkzeug sucht speedtest.exe, ffmpeg.exe,
config.json und key_assignments.json neben sich.LeitungsTester.exe starten (oder die .ps1, dann
entfällt die Selbstprüfung).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.
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.
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.
Wie beim Netz-Werkzeug: vorab einrichten, Paket ziehen, am Zielrechner auspacken. Mit der Frage, ob die Zugangsdaten mitgehen sollen — standardmäßig nicht.
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.
Die bisherige Fassung bleibt vollständig im Verlauf erhalten und lässt sich jederzeit wiederherstellen.