Filipe, am Tag einer Sendung: „sobald meine kamera auch zu sehen ist, also mich, dan haengen die videos EXTREEEEEM. wenn das video alleine nur laeuft dan laeuft es fast perfekt." Haus: Team Dogi. Zwei Ursachen, und BEIDE sind nur aktiv, wenn Kameras sichtbar sind -- genau deshalb lief das Video allein sauber. 1. ZWOELF KODIERER OHNE JEDE GRENZE Die Reaction verbindet jeden mit jedem. Fuer jeden Zuschauer baut der Host eine eigene Verbindung auf, und jede hat ihren EIGENEN Kodierer: Bei zwoelf Sichtplaetzen kodiert sein Rechner dasselbe Gesicht zwoelfmal gleichzeitig, waehrend daneben das Video dekodiert wird. Und an keinem einzigen Sender stand eine Grenze. `addTrack` ohne ein Wort zu `maxBitrate`, `maxFramerate`, `scaleResolutionDownBy` oder `degradationPreference` -- zwoelf Kodierer, die alle gleichzeitig „so gut wie moeglich" versuchen und dem Video die Rechenzeit wegnehmen. Jetzt: 220 kbit, 15 Bilder, Aufloesung halbiert (240x180 gehen hinaus, das Fenster ist 200 Pixel breit), `balanced`. Rund ein Sechstel der bisherigen Rechenlast. Der geteilte Bildschirm bekommt eigene Werte -- dort ist die Aufloesung der Zweck und die Bildrate fast egal. 2. MATTGLAS UEBER EINEM LAUFENDEN VIDEO `backdrop-filter` zwingt die Grafikkarte, den Bereich DAHINTER neu zu lesen und weichzuzeichnen. Ueber einer stehenden Flaeche kostet das einmal etwas; ueber einem laufenden Video bei JEDEM Bild -- auf derselben Grafikkarte, die das Video dekodiert. Vier Stellen lagen auf der Leinwand: das Namensschild JEDES Kamerafensters (bei voller Sendung dreizehnmal), die Tempoanzeige, die Senderleiste und der Ton-Knopf. Alle vier tragen jetzt einen deckenderen Grund und keinen Weichzeichner. Dazu `contain: paint` am Kamerafenster: Ein ankommendes Kamerabild zieht keine Neuzeichnung der Leinwand mehr nach sich. EIN RUECKZIEHER, UND ZWAR EIN WICHTIGER Mein erster Griff war, die Kamera kleiner aufzunehmen (480x360 statt 640x480). `mess-reaktion` meldete daraufhin „Im Vorraum laeuft kein eigenes Bild" -- eine Warnung, die vorher nicht da war. 640x480 kann jede Kamera, 480x360 nicht, und `ideal` ist zwar nur ein Wunsch, aber was dabei herauskommt, entscheidet der Treiber. Am Abend einer Sendung ist „vielleicht kein Bild" der schlechteste aller Tausche. Die Aufloesung bleibt deshalb, kleiner gerechnet wird im Kodierer -- dort ist es nachweislich erlaubt und kann nichts verhindern, was vorher ging. GEMESSEN -- mess-kameralast.mjs (neu), 13 Messungen, 0 Fehler Sie fragt nicht „kommt ein Bild an" (das war immer mit Ja beantwortet), sondern WIE TEUER das Bild ist, das hinausgeht -- und zwar an der LAUFENDEN Verbindung ueber `getParameters()`, nicht im Quelltext. Eine Zahl im Code beweist nicht, dass der Browser sie uebernommen hat. Zum Mattglas stellt sie die PRAEZISE Frage: Der erste Entwurf suchte jedes `backdrop-filter` auf der Seite und meldete drei, die gar nicht ueber der Leinwand liegen (Kopfleiste, Regieleiste, Buehnenschild) -- teuer ist es aber nur, wenn sich dahinter etwas bewegt. Gemessen wird jetzt die UEBERSCHNEIDUNG mit dem Videobereich; so kamen die zwei heraus, die ich uebersehen hatte. mess-kameralast (neu) 13, 0 Fehler mess-reaktion 0 ACHTUNG (mit dem Rueckzieher wieder sauber) pruef-reaktion 588, 0 Fehler pruef-css-klassen gruen Co-Authored-By: Claude Opus 5 <[email protected]>
296 lines
14 KiB
HTML
296 lines
14 KiB
HTML
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
<title>Reaction · Team Dogi</title>
|
|
<meta name="robots" content="noindex, nofollow" />
|
|
<link rel="manifest" href="/workspace/app.webmanifest" />
|
|
<meta name="theme-color" content="#06090f" />
|
|
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png?v=202610082157" />
|
|
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png?v=202610082157" />
|
|
<link rel="stylesheet" href="assets/css/gate.css?v=202610082157" />
|
|
<link rel="stylesheet" href="assets/css/start.css?v=202610082157" />
|
|
<link rel="stylesheet" href="assets/css/foyer.css?v=202610082157" />
|
|
<link rel="stylesheet" href="assets/css/module.css?v=202610082157" />
|
|
<link rel="stylesheet" href="assets/css/haus.css?v=202610082157" />
|
|
</head>
|
|
|
|
<body class="start">
|
|
|
|
<div class="schleier" aria-hidden="true"></div>
|
|
|
|
<header class="kopfleiste">
|
|
<button type="button" class="zurueck-knopf" id="zurueck" hidden>
|
|
<svg class="zurueck-knopf__pfeil" viewBox="0 0 24 24" aria-hidden="true">
|
|
<path d="M14.5 5.5 8 12l6.5 6.5" />
|
|
</svg>
|
|
<span class="zurueck-knopf__text">Zurück</span>
|
|
</button>
|
|
<p class="marke"><span class="marke__text"><a class="zurueck" href="start.html">Team Dogi</a> · Reaction</span></p>
|
|
<div class="kopfleiste__rechts">
|
|
<span class="wer" id="wer">…</span>
|
|
<button type="button" class="abmelden" id="abmelden">Abmelden</button>
|
|
</div>
|
|
</header>
|
|
|
|
<!-- ======================================================================
|
|
DAS FOYER (08.10.2026)
|
|
|
|
Filipe: „diese kachel soll nicht mehr geschlossen sein, ABER wenn
|
|
man drauf drückt geht zuerst eine seite auf mit
|
|
reihen/kategorien. links eine reihe wo die nächsten geplanten
|
|
videos schon bereit stehen. wan und umd wie viel uhr … und das
|
|
soll geschlossen sein außer für vanvan und dogfather. in der
|
|
mitte sollen die leute dan wenn eine sendung läuft drauf drücken
|
|
können und der sendung beitreten. auch bei der vorschau schon und
|
|
dan rechts will ich die letzte reihe/kategorie, da sollen die
|
|
leute alle mir videos anraten können."
|
|
|
|
---------------------------------------------------------------------
|
|
WARUM DAS EINE EIGENE SEITE IST UND KEIN VIERTER ZUSTAND DES SAALS
|
|
|
|
Der Saal meldet jeden an, der ihn oeffnet („dabei"), baut
|
|
Verbindungen auf und haelt den Ereignisstrom offen. Das ist
|
|
richtig fuer jemanden, der zusieht -- und falsch fuer jemanden,
|
|
der nur nachsehen will, ob heute Abend etwas laeuft. Waere das
|
|
Foyer der vierte Zustand derselben Seite, zaehlte jeder Blick
|
|
als Zuschauer, und die Zahl im Regiepult saehe nach Publikum
|
|
aus, wo niemand zusieht.
|
|
|
|
Hier wird nur GELESEN. Erst der Knopf in der Mitte fuehrt in den
|
|
Saal, und ab da gilt alles, was dort gilt.
|
|
|
|
---------------------------------------------------------------------
|
|
DREI REIHEN, UND DIE MITTE IST DIE BREITESTE
|
|
|
|
Links der Plan, in der Mitte der Weg hinein, rechts die
|
|
Vorschlaege. Die Mitte bekommt mehr Platz, weil sie das Einzige
|
|
ist, weswegen die meisten hier sind -- und weil ein Knopf, der
|
|
in eine laufende Sendung fuehrt, nicht gesucht werden soll.
|
|
|
|
AM HANDY STEHT DIE MITTE OBEN. Dort ist „links" nur noch „vor
|
|
allem anderen", und das waere die falsche Reihenfolge: Wer am
|
|
Telefon nachsieht, ob es laeuft, soll es in der ersten Zeile
|
|
sehen und nicht nach zwei Bildschirmhoehen Plan.
|
|
====================================================================== -->
|
|
<main class="inhalt inhalt--breit" id="foyer">
|
|
|
|
<section class="kopf-zeile">
|
|
<div>
|
|
<p class="marke">Reaction</p>
|
|
<h1 class="titel">Zusammen schauen</h1>
|
|
<p class="unterzeile" id="kopf-satz">Wird geladen …</p>
|
|
</div>
|
|
</section>
|
|
|
|
<p class="fehler" id="fehler" role="alert" aria-live="polite" hidden></p>
|
|
|
|
<div class="foyer-reihen" id="reihen">
|
|
|
|
<!-- ============ LINKS: DER PLAN ===========================
|
|
Nur fuer DogFather und VanVan. Filipe: „und das soll
|
|
geschlossen sein außer für vanvan und dogfather."
|
|
|
|
SIE STEHT GAR NICHT ERST DA, statt leer oder gesperrt zu
|
|
sein. Ein Kasten mit Schloss darauf erzaehlt, dass es etwas
|
|
zu sehen gaebe -- und genau das soll er nicht. -->
|
|
<section class="foyer-reihe foyer-reihe--plan" id="reihe-plan" hidden>
|
|
<header class="foyer-reihe__kopf">
|
|
<h2 class="foyer-reihe__ueber">Was ansteht</h2>
|
|
<span class="foyer-reihe__nur">nur ihr zwei</span>
|
|
</header>
|
|
<p class="foyer-reihe__satz">
|
|
Die Warteschlange aus der Regie — hier nach Termin sortiert.
|
|
Was noch keinen hat, steht unten.
|
|
</p>
|
|
<ol class="plan-liste" id="plan-liste"></ol>
|
|
<p class="foyer-reihe__fuss">
|
|
Termine setzt du im Saal unter <strong>Regie → Warteschlange</strong>.
|
|
</p>
|
|
</section>
|
|
|
|
<!-- ============ MITTE: HINEIN ============================= -->
|
|
<section class="foyer-reihe foyer-reihe--saal" id="reihe-saal">
|
|
<header class="foyer-reihe__kopf">
|
|
<h2 class="foyer-reihe__ueber">Die Sendung</h2>
|
|
<span class="foyer-lampe" id="lampe" data-stand="laedt">
|
|
<span class="foyer-lampe__punkt" aria-hidden="true"></span>
|
|
<span class="foyer-lampe__wort" id="lampe-wort">…</span>
|
|
</span>
|
|
</header>
|
|
|
|
<div class="saal-karte" id="saal-karte" data-bild="nein">
|
|
<img id="saal-bild" alt="" />
|
|
<span class="saal-karte__leer" id="saal-leer">Gerade läuft nichts.</span>
|
|
</div>
|
|
|
|
<strong class="saal-titel" id="saal-titel">—</strong>
|
|
<p class="saal-satz" id="saal-satz"></p>
|
|
|
|
<!-- DER KNOPF IST EIN LINK UND KEIN BUTTON. Wer ihn mit der
|
|
mittleren Maustaste antippt, bekommt einen neuen Reiter --
|
|
genau das tut man, wenn man die Sendung nebenher laufen
|
|
lassen will. Ein `button` mit `location.href` kann das
|
|
nicht, und man merkt es erst, wenn es nicht geht. -->
|
|
<a class="saal-knopf" id="saal-knopf" href="reaktion.html" hidden>
|
|
<span class="saal-knopf__wort" id="saal-knopf-wort">Beitreten</span>
|
|
</a>
|
|
<p class="saal-zahl" id="saal-zahl" hidden></p>
|
|
</section>
|
|
|
|
<!-- ============ RECHTS: ANRATEN ===========================
|
|
Filipe: „da sollen die leute alle mir videos anraten können.
|
|
also da können die leute videos reinschicken und nur ich und
|
|
vanvan sehen sie."
|
|
|
|
JEDER DARF SCHICKEN, NIEMAND SIEHT FREMDE. Was man selbst
|
|
geschickt hat, steht darunter mit seinem Stand -- sonst
|
|
waere das Feld ein Loch, in das man etwas wirft. -->
|
|
<section class="foyer-reihe foyer-reihe--raten" id="reihe-raten">
|
|
<header class="foyer-reihe__kopf">
|
|
<h2 class="foyer-reihe__ueber">Video anraten</h2>
|
|
<span class="foyer-reihe__zahl" id="raten-zahl" hidden></span>
|
|
</header>
|
|
<p class="foyer-reihe__satz" id="raten-satz">
|
|
Schick uns ein Video, das wir zusammen schauen sollen.
|
|
Sehen tun das nur DogFather und VanVan.
|
|
</p>
|
|
|
|
<form class="raten-form" id="raten-form">
|
|
<label class="raten-feld">
|
|
<span>YouTube-Adresse</span>
|
|
<input type="text" id="raten-video" autocomplete="off"
|
|
placeholder="Adresse einfügen" />
|
|
</label>
|
|
<!-- KEIN `maxlength` HIER. Die Zahl stand sonst zweimal: hier
|
|
und als `VORSCHLAG_NOTIZ_MAX` im Server. Wer sie dort
|
|
aendert, haette hier die alte stehen gelassen, und der
|
|
Zaehler neben „Warum?“ hätte eine Grenze gezählt, die es
|
|
nicht mehr gibt. Das Feld lernt sie von der Auskunft
|
|
(`notiz_max`); bis dahin schneidet der Server ohnehin ab. -->
|
|
<label class="raten-feld">
|
|
<span>Warum? <span class="raten-rest" id="raten-rest"></span></span>
|
|
<input type="text" id="raten-notiz"
|
|
placeholder="Freiwillig — ein Satz reicht" />
|
|
</label>
|
|
<!-- `knopf` und nicht `knopf-still--haupt`: Der Hauptknopf des
|
|
Hauses steht in `gate.css`, und die lädt diese Seite.
|
|
`knopf-still--haupt` wird in `reaktion.css` gestaltet --
|
|
die gehört dem Saal und wird hier nicht geladen. Die
|
|
Klasse hätte also im Quelltext ausgesehen, als sei etwas
|
|
hervorgehoben, und auf dem Bildschirm wäre es ein
|
|
gewöhnlicher Knopf gewesen. Gefunden hat das
|
|
`pruef-css-klassen`. -->
|
|
<button type="submit" class="knopf" id="raten-los">Abschicken</button>
|
|
</form>
|
|
|
|
<ol class="raten-liste" id="raten-liste"></ol>
|
|
<p class="foyer-reihe__fuss" id="raten-fuss"></p>
|
|
</section>
|
|
|
|
</div>
|
|
|
|
<!-- ==================================================================
|
|
DAS REGIE-TOR (08.10.2026)
|
|
|
|
Filipe: „unter den [Reihen] fehlt eine kachel, die viel kraesser
|
|
und spezieller aussehen soll, wo nur dogfather oder vanvan
|
|
reinkommen. mit ihren zugangscodes fuer die seite. und das soll
|
|
die regie kachel sein. die muss wirklich ultra krass sein."
|
|
Und zur Staerke des Schlosses: „die soll jeder sehen aber nur
|
|
vanvan und dogfather sollen da rein kommen bitte."
|
|
|
|
SIE STEHT FUER ALLE DA -- anders als die linke Reihe, und zwar
|
|
auf ausdruecklichen Wunsch. Deshalb steht hier NICHTS drin, was
|
|
jemand nicht sehen soll: kein Titel, kein Stand, keine Zahl.
|
|
Eine verschlossene Tuer mit einem Schild darauf.
|
|
|
|
EIN `button` UND KEIN LINK. Der Link in der Mitte fuehrt
|
|
woandershin; dieser hier fuehrt zunaechst nirgendwohin, sondern
|
|
fragt. Ein `a href` waere ein Versprechen, das er nicht haelt --
|
|
und in einem neuen Reiter geoeffnet landete man auf einer Seite,
|
|
die sofort zurueckschickt.
|
|
================================================================== -->
|
|
<button type="button" class="regie-tor" id="regie-tor" data-darf="nein" data-offen="nein">
|
|
<span class="regie-tor__licht" aria-hidden="true"></span>
|
|
<span class="regie-tor__innen">
|
|
<span class="regie-tor__zeichen" aria-hidden="true">
|
|
<svg viewBox="0 0 24 24" class="regie-tor__glyphe">
|
|
<rect x="4.5" y="10.5" width="15" height="10" rx="2.2" />
|
|
<path d="M8 10.5V7.3a4 4 0 0 1 8 0v3.2" />
|
|
<circle cx="12" cy="15.4" r="1.5" />
|
|
</svg>
|
|
</span>
|
|
<span class="regie-tor__text">
|
|
<span class="regie-tor__ueber">Regie</span>
|
|
<strong class="regie-tor__titel" id="regie-titel">Der Platz hinter dem Pult</strong>
|
|
<span class="regie-tor__satz" id="regie-satz">…</span>
|
|
</span>
|
|
<span class="regie-tor__marke" id="regie-marke">Nur ihr zwei</span>
|
|
</span>
|
|
</button>
|
|
</main>
|
|
|
|
<!-- AUSSERHALB VON `main`, und das ist kein Schoenheitsfehler.
|
|
`body.start > main` traegt `position: relative; z-index: 1`, die
|
|
Kopfleiste steht bei 6 -- und alles INNERHALB von main wird mit
|
|
main zusammen eingeordnet. Ein `z-index: 500` darin bliebe unter
|
|
der 6 daneben, und der Vorhang laege unter der Kopfleiste.
|
|
Gemessen am 08.10.2026 am Vorraum des Saals, dort war es genau
|
|
dieser Fehler. -->
|
|
<div class="regie-vorhang" id="regie-vorhang" hidden>
|
|
<div class="regie-fenster" role="dialog" aria-modal="true"
|
|
aria-labelledby="regie-fenster-titel">
|
|
<h2 class="regie-fenster__titel" id="regie-fenster-titel">Regie aufschließen</h2>
|
|
<p class="regie-fenster__satz" id="regie-fenster-satz">
|
|
Tipp deinen Zugangscode ein — denselben, mit dem du dich hier anmeldest.
|
|
</p>
|
|
<form id="regie-form">
|
|
<label class="regie-feld">
|
|
<span>Dein Zugangscode</span>
|
|
<!-- `type=password` und nicht `text`: Wer in einer Sendung den
|
|
Bildschirm teilt, soll ihn nicht mittippen lassen.
|
|
`autocomplete="off"` dazu -- das ist kein Anmeldefeld, und
|
|
ein Browser, der hier etwas vorschlaegt, schlaegt das
|
|
Falsche vor. -->
|
|
<input type="password" id="regie-code" autocomplete="off"
|
|
inputmode="text" placeholder="CODE-…" />
|
|
</label>
|
|
<p class="regie-fenster__fehler" id="regie-fehler" role="alert" hidden></p>
|
|
<div class="regie-fenster__knoepfe">
|
|
<!-- `knopf-still` und nicht ein erfundenes `knopf-leise`: Der
|
|
leise Knopf des Hauses heisst so und steht in `gate.css`,
|
|
die diese Seite laedt. Genau diese Falle hat heute schon
|
|
einmal zugeschlagen (`knopf-still--haupt`, gestaltet in
|
|
reaktion.css, die hier gar nicht geladen wird) -- im
|
|
Quelltext sah es nach Gestaltung aus, auf dem Bildschirm
|
|
war es ein nackter Browserknopf. -->
|
|
<button type="button" class="knopf-still" id="regie-ab">Abbrechen</button>
|
|
<button type="submit" class="knopf" id="regie-los">Aufschließen</button>
|
|
</div>
|
|
</form>
|
|
<!-- WAS DIESE TUER LEISTET UND WAS NICHT, STEHT DARUNTER.
|
|
Eine Sicherung, die staerker aussieht, als sie ist, ist
|
|
schlechter als gar keine: Wer sie fuer mehr haelt, laesst
|
|
deswegen etwas anderes weg. -->
|
|
<p class="regie-fenster__kleingedruckt">
|
|
Das hält einen neugierigen Blick auf, nicht jemanden, der an deinem
|
|
offenen Rechner sitzt. Danach bleibt die Regie zwölf Stunden offen.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- bereiche.js VOR kopf.js: Dort steht `window.Bereiche`, und kopf.js
|
|
liest daraus die Leitungsrollen. -->
|
|
<script src="assets/js/bereiche.js?v=202610082157" defer></script>
|
|
<script src="assets/js/wahl.js?v=202610082157" defer></script>
|
|
<script src="assets/js/nachfrage.js?v=202610082157" defer></script>
|
|
<script src="assets/js/meldung.js?v=202610082157" defer></script>
|
|
<script src="assets/js/installieren.js?v=202610082157" defer></script>
|
|
<script src="assets/js/kopf.js?v=202610082157" defer></script>
|
|
<script src="assets/js/glocke.js?v=202610082157" defer></script>
|
|
<script src="assets/js/reaktion-foyer.js?v=202610082157" defer></script>
|
|
</body>
|
|
</html>
|