Paket bauen und veroeffentlichen / paket (push) Failing after 1m21s
- /pult als installierbare Web-App (Manifest, Service Worker, Symbole) - Soundboard: Sounds vom Handy hochladen, bearbeiten, im Stream spielen ueber die neue Browser-Source /sounds - Szenen, Clip und Stummschalter: der Stream-PC waehlt sich mit eigenem Schluessel beim Hub ein (fern:verbinden), Befehle warten auf OBS - Browser-Sources melden, welche Seite sie sind Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
57 lines
2.7 KiB
Markdown
57 lines
2.7 KiB
Markdown
# @abdulive/overlay-server
|
|
|
|
Der einzige Server, der von außen erreichbar ist. Liefert die Seiten aus
|
|
[`overlay-web`](../overlay-web/README.md) aus, hält den Ereignisstrom dorthin
|
|
offen und bringt Einrichtung und OAuth-Rückruf unter dieselbe Adresse.
|
|
|
|
```
|
|
/ Übersicht mit den Adressen für OBS Passwort
|
|
/setup Einrichtung: Twitch-Apps, Tokens Passwort
|
|
/callback OAuth-Rückruf von Twitch offen, `state` schützt
|
|
/alerts … die Browser-Sources Schlüssel in der URL
|
|
/events der Ereignisstrom dahinter Schlüssel in der URL
|
|
/pult Steuerpult fürs Handy (PWA) Passwort
|
|
/soundboard/… Sounds hochladen, ändern, spielen Passwort (Datei: Schlüssel)
|
|
/fern/… Leitung zum Stream-PC für OBS eigener Schlüssel im Kopf
|
|
```
|
|
|
|
Der Fern-Schlüssel ist der dritte Zugang und der einzige, der etwas schaltet:
|
|
er steht deshalb nie in einer Adresse, sondern in `authorization: Bearer …`.
|
|
|
|
## Server-Sent Events statt WebSocket
|
|
|
|
[`chat-control.md`](../../docs/projects/chat-control.md) skizziert einen
|
|
WS-Kanal. Es sind SSE geworden, aus drei Gründen:
|
|
|
|
1. Node bringt einen WebSocket-*Client* mit, aber keinen Server. Den müsste
|
|
man selbst schreiben, inklusive Handshake und Rahmenformat - in einem
|
|
Projekt ohne Abhängigkeiten heißt das: selbst pflegen.
|
|
2. `EventSource` verbindet sich von allein neu. Die tote Browser-Source nach
|
|
einem Neustart ist der häufigste Fehler bei solchen Overlays, und hier
|
|
löst ihn der Browser.
|
|
3. Die Richtung stimmt. Das Overlay hört nur zu; es sendet nie.
|
|
|
|
Drei Dinge halten die Verbindung ehrlich:
|
|
|
|
- **Herzschlag alle 15 s**, als echtes Ereignis und nicht als SSE-Kommentar -
|
|
ein Kommentar hält die Verbindung offen, ist im Browser aber unsichtbar.
|
|
- **Wachhund im Client**: 45 s ohne Nachricht heißt neu verbinden. OBS hält
|
|
eine tote Verbindung erstaunlich lange für lebendig.
|
|
- **Schnappschuss beim Verbinden**: der letzte Stream-Zustand und die letzten
|
|
Chatnachrichten, damit die Quelle nach dem Neuverbinden nicht leer im Bild
|
|
steht.
|
|
|
|
## Zugang
|
|
|
|
Siehe [ADR-0008](../../docs/decisions/ADR-0008-geteilter-betrieb.md).
|
|
|
|
- **Passwort** für alles, was ein Mensch bedient. Setzen mit
|
|
`abdulive web:passwort`, nie über das Netz - ein Dienst, bei dem man das
|
|
Passwort über die offene Weboberfläche setzen kann, hat kein Passwort.
|
|
- **Schlüssel in der Adresse** für die Browser-Sources. Eine Browser-Source
|
|
kann kein Formular ausfüllen. Der Schlüssel darf nur lesen und lässt sich
|
|
auf der Übersichtsseite neu würfeln.
|
|
|
|
Ohne `publicUrl` bindet der Server weiter auf `127.0.0.1` und verhält sich wie
|
|
vorher.
|