61 Commits

Author SHA1 Message Date
team3
3ebcde7234 Senden mit 30 Bildern und 6000 kbit/s
Mit 60 Bildern und 9000 kbit/s warf OBS abends 45 % der Bilder weg, weil der
Upload sie nicht mehr durchbrachte: gemessen nur 11-12 Mbit/s gegen 25-37
zur Mittagszeit. Rendering und Encoding lagen dabei bei 0 % Verlust, die
Maschine war also unschuldig.

Filme laufen ohnehin mit 24 Bildern, da bringen 60 nichts. Das Keyframe-
Intervall geht auf 30 mit, sonst kann MediaMTX keine Segmente von einer
Sekunde mehr schneiden.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-08-31 20:36:54 +02:00
team3
b9dbd5e753 Genre-Badges alphabetisch
Nach Häufigkeit sortiert wanderten sie bei jedem Reiterwechsel an eine
andere Stelle. Alphabetisch findet man ein Genre immer dort, wo man es
zuletzt gesehen hat.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-08-31 13:54:11 +02:00
team3
bbd1270fd9 Ein Namensfeld für alles, oben rechts
Bisher fragten Vorschlag und Wertung getrennt nach dem Namen — einmal in der
Filmansicht, einmal über der Liste. Jetzt steht er einmal in der
Reiterleiste und gilt für beides. Wer keinen einträgt, bleibt anonym.

Dazu: make stream geht jetzt an den Server und beendet vorher ein laufendes
OBS. Der lokale Weg heißt make stream-local.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-08-31 13:48:40 +02:00
team3
56c3f10026 Stream lässt sich nicht mehr anhalten
Was der Server sendet, läuft. Wer anhält, fällt aus dem Gleichlauf und
müsste den Rückstand hinterher mit erhöhtem Tempo aufholen. Statt der
Browser-Steuerung gibt es jetzt eine eigene Leiste: Lautstärke, Stumm und
Vollbild. Pausieren, Spulen und Geschwindigkeit fehlen darin.

Abgedeckt sind alle Wege zum Anhalten, weil jeder davon ein pause-Ereignis
auslöst: Rechtsklick-Menü, Bild-in-Bild, Medientasten der Tastatur. Die
Leertaste wird zusätzlich abgefangen, sie käme sonst dem Video zuvor.

Der Ton startet stumm, sonst verweigert der Browser die automatische
Wiedergabe. Ein Klick auf "Ton einschalten" gilt als Geste und schaltet ihn
frei.

Beim Tonweg zwei Fehler behoben:
- Der Loopback zum Mithören nahm das Ende der aufrufenden Shell mit. Mitten
  im Film hörte dann niemand mehr etwas. setsid löst ihn davon.
- Der Lautstärkeregler fasst seit der Umstellung die neue Senke an, nicht
  mehr das Ausgabegerät. Stand das auf halber Kraft, war bei "voll
  aufgedreht" Schluss bei der Hälfte. Jetzt geht das Gerät auf Anschlag und
  die Senke übernimmt den gewohnten Pegel.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-08-31 13:32:43 +02:00
team3
af66ae6e1c Stream: Rechenlast des Proxys senken
Ein Zuschauer erzeugt rund zwanzig Anfragen je Sekunde. Bisher baute der
Proxy dafür jedes Mal eine neue Verbindung auf, holte die Antwort komplett
in den Speicher und schickte sie durch gzip — obwohl Videosegmente bereits
komprimiert sind. Gemessen: 47-67 % CPU für einen einzigen Zuschauer.

Jetzt ein gemeinsamer Client mit offenen Verbindungen, die Daten fließen
stückweise durch, und /stream bleibt von der Kompression verschont. Dazu
protokolliert die App die Stream-Anfragen nicht mehr einzeln; das waren
410 Zeilen je Minute bei einem Zuschauer.

Ergebnis: 11,5 % statt 47-67 %. Mit fünfzehn Zuschauern liegt die Last bei
150 % von 400 % verfügbarer Rechenzeit.

Dazu am Rand:
- hlsAlwaysRemux hält den Muxer durchgehend offen. Vorher riss er 60 s nach
  dem letzten Zuschauer ab und setzte beim Neuaufbau die Zeitbasis zurück.
- hlsAllowOrigin ist veraltet und heißt jetzt hlsAllowOrigins.
- Der Player holt höchstens mit 1,1-fachem Tempo auf statt mit 1,5. Das
  reicht für normale Schwankungen und bleibt unhörbar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013XVnRop5c3or3B8xE2hpgZ
2026-08-31 13:19:02 +02:00
team3
f5395735a5 update 2026-08-31 12:28:34 +02:00
team3
e7216138c7 update 2026-08-31 11:54:20 +02:00
team3
f29a4106bb update 2026-08-29 11:39:27 +02:00
team3
1130575e43 update 2026-08-29 11:32:23 +02:00
team3
f5aeaadc42 update 2026-08-29 11:28:25 +02:00
team3
38d5a8cfae init 2026-08-12 19:30:41 +02:00