Pult: Handy als Stream Deck mit Soundboard und Szenenwechsel
Paket bauen und veroeffentlichen / paket (push) Failing after 1m21s
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>
This commit is contained in:
1 parent
70448967f5
commit
8be195d938
29 files changed
+2935
-28
No files matched your search
@@ -690,6 +690,51 @@ async function webPasswort(args: string[]): Promise<void> {
|
||||
console.log(`${C.ok}Passwort gesetzt.${C.off} Angemeldet bleibt man 30 Tage.`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Den Stream-PC beim Hub anmelden. Prueft vorher, ob der Hub den Schluessel
|
||||
* annimmt - ein Tippfehler soll hier auffallen und nicht erst im Stream, wenn
|
||||
* der Szenenknopf am Handy nichts tut.
|
||||
*/
|
||||
async function fernVerbinden(args: string[]): Promise<void> {
|
||||
const { readSecrets, updateSecrets } = await import('#twitch/secrets.ts');
|
||||
const [adresse, schluessel] = args;
|
||||
if (adresse === 'aus') {
|
||||
updateSecrets((s) => { delete s.fern; });
|
||||
console.log('Fernsteuerung getrennt. Wirkt nach dem naechsten Start von abdulive ingest.');
|
||||
return;
|
||||
}
|
||||
if (!adresse || !schluessel) {
|
||||
const da = readSecrets().fern;
|
||||
console.log(da ? `Eingerichtet fuer ${da.url}.` : 'Nicht eingerichtet.');
|
||||
console.log('Aufruf: abdulive fern:verbinden <adresse> <schluessel> (steht auf der Uebersichtsseite)');
|
||||
return;
|
||||
}
|
||||
const url = adresse.replace(/\/+$/, '');
|
||||
if (!/^https?:\/\//.test(url)) throw new Error('Die Adresse muss mit https:// anfangen.');
|
||||
|
||||
const probe = new AbortController();
|
||||
let status: number;
|
||||
try {
|
||||
const res = await fetch(`${url}/fern/befehle`, {
|
||||
headers: { authorization: `Bearer ${schluessel}` },
|
||||
signal: AbortSignal.any([probe.signal, AbortSignal.timeout(10_000)]),
|
||||
});
|
||||
status = res.status;
|
||||
} catch (err) {
|
||||
throw new Error(`Hub unter ${url} nicht erreichbar: ${(err as Error).message}`);
|
||||
} finally {
|
||||
// Die Leitung nur oeffnen, um den Schluessel zu pruefen. Offen gelassen
|
||||
// haette sie der Hub als verbundenen PC gezaehlt.
|
||||
probe.abort();
|
||||
}
|
||||
if (status === 403) throw new Error('Der Hub lehnt den Schluessel ab. Neu von der Uebersichtsseite kopieren.');
|
||||
if (status !== 200) throw new Error(`Der Hub antwortet ${status}. Laeuft dort eine Fassung mit Pult?`);
|
||||
|
||||
updateSecrets((s) => { s.fern = { url, key: schluessel }; });
|
||||
console.log(`${C.ok}Verbunden.${C.off} Der Hub nimmt den Schluessel an.`);
|
||||
console.log('Jetzt abdulive ingest neu starten - danach steuert das Pult OBS.');
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------- golive
|
||||
|
||||
/**
|
||||
@@ -901,6 +946,10 @@ abdulive - Werkzeugkasten fuer Abdus Stream
|
||||
ingest Daemon auf dem Stream-PC (OBS, !clip, Rendern)
|
||||
overlay [--demo] Nur den Overlay-Server, --demo mit erfundenem Betrieb
|
||||
web:passwort [wort] Passwort fuer die Weboberflaeche setzen
|
||||
fern:verbinden <adresse> <schluessel>
|
||||
Stream-PC beim Hub anmelden, damit das Pult OBS
|
||||
steuern kann. Der Befehl steht fertig auf der
|
||||
Uebersichtsseite des Hubs. "aus" statt Adresse trennt.
|
||||
check-env Umgebung pruefen
|
||||
db:migrate Migrationen anwenden
|
||||
fetch-model [name] Whisper-Modell laden (Vorgabe: ggml-small.bin)
|
||||
@@ -956,6 +1005,7 @@ try {
|
||||
}
|
||||
case 'overlay': await overlayOnly(args); break;
|
||||
case 'web:passwort': await webPasswort(args); break;
|
||||
case 'fern:verbinden': await fernVerbinden(args); break;
|
||||
case 'discord:bot': await discordBot(); break;
|
||||
case 'help': case undefined: help(); break;
|
||||
default:
|
||||
|
||||
Reference in new issue
Block a user