feat: Call-Robustheit + Standalone-Voice-Channel per Klick beitretbar (M3)

Mit zwei echten Test-Accounts (zwei GUI-Instanzen via PYRAMID_PROFILE_DIR)
durchgeklickt: Beitreten, Teilnehmerliste, bidirektionaler Screenshare,
Live-Qualitaetswechsel (Full HD 60fps), sauberes Verlassen.

- rooms_list.dart: Voice-Channel in der normalen Raumliste war per Klick
  nicht beitretbar (oeffnete nur Chat) -> _toggleVoiceChannel wie Space-Liste.
- livekit_call_manager.dart: _callGeneration entwertet laufenden connect
  bei Auflegen/Wechsel (keine Geisterverbindung mit offenem Mikro);
  Fehlerpfade setzen error sichtbar statt still zu verschwinden.
- rooms_panel_core.dart: raeumt activeVoiceRoomIdProvider auf, wenn der
  Voice-Service inaktiv wird, + Fehler-SnackBar.
- test/live_call_setup_test.dart: gegateter Setup-Helfer fuer den Testraum.

UNGETESTET: echtes 2-Peer-Audio, Netz-Abbruch mitten im Call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Bernd Steckmeister
2026-07-06 22:50:58 +02:00
parent ffd70caffd
commit f8f5332d90
7 changed files with 407 additions and 10 deletions
+24
View File
@@ -258,6 +258,18 @@ lassen, ohne dass andere Module angefasst werden müssen.
- [ ] Voice-Channel-Logik robust machen: Beitreten/Verlassen/Wechseln ohne Hänger,
klarer Zustand wer drin ist, sauberes Verhalten bei Verbindungsabbruch
**Teilfortschritt 2026-07-06 (Nacht, mit 2 echten Test-Accounts durchgeklickt):**
Standalone-Voice-Channel in der Raumliste war per Klick gar nicht
beitretbar → gefixt (`_toggleVoiceChannel` in rooms_list.dart, wie
Space-Liste). Zustands-Härtung in livekit_call_manager.dart:
`_callGeneration` verhindert Geisterverbindungen bei Auflegen/Wechsel
während `connect`; Fehlerpfade setzen `error` sichtbar statt still zu
verschwinden; rooms_panel_core räumt `activeVoiceRoomIdProvider` auf,
wenn der Service inaktiv wird, + Fehler-SnackBar. REAL getestet:
Beitreten (beide), Teilnehmerliste, bidirektionaler Screenshare,
Live-Qualitätswechsel, sauberes Verlassen. **UNGETESTET:** echtes
2-Peer-Audio (beide auf 1 PC), Netz-Abbruch mitten im Call (nur im
Code abgesichert). Nicht abgehakt.
- [ ] Call-UI aufräumen: aufgeräumter, intuitiver, konsistent (Mini-Call-Widget, Vollansicht)
- [ ] **Windows: Audiogeräte-Erkennung reparieren** (Mikrofon/Ausgabe erkennen und in den
Einstellungen auswählbar machen geht aktuell gar nicht)
@@ -271,7 +283,19 @@ lassen, ohne dass andere Module angefasst werden müssen.
- [ ] **Framerate verbessern:** Ursache messen (Encoder? Auflösung? Simulcast-Settings?
Software- statt Hardware-Encoding?), dann gezielt fixen
**Teilfortschritt 2026-07-06 (Nacht, `docs/STREAMING_60FPS.md`, ffd70ca):**
Vier Ruckel-Ursachen adressiert FPS-Deckel (jetzt hd60/fhd60 mit
echten 60 FPS), zu niedrige Bitrate (5/8 Mbit/s), Capture blieb auf
1080p/15 (Preset wird jetzt bis in ScreenShareCaptureOptions
durchgereicht), degradationPreference (60-FPS-Modi
maintainFramerate, kein Simulcast). contentHint='motion' in
flutter_webrtc 1.4.1 aus Dart nicht setzbar (dokumentiert). REAL
getestet: Umschalten auf Full HD 60fps live, Screenshare läuft weiter.
**UNGETESTET:** subjektives Ruckel-Empfinden + realer 60-FPS-RTP
(Sender/Empfänger auf 1 PC = nicht beurteilbar), braucht 2 Geräte+Netz.
- [ ] Auflösung/Qualität wählbar für den **Streamer** (z. B. 720p/1080p + FPS-Wahl)
**2026-07-06:** FPS-Wahl umgesetzt SENDEN-Menü hat jetzt „HD 60fps"
und „Full HD 60fps" zusätzlich zu sd/hd/fhd/4k (ffd70ca).
- [ ] Qualität wählbar für den **Empfänger** (LiveKit-Simulcast-Layer auswählen)
- [ ] Sauberes Degradieren bei schwacher Bandbreite statt Ruckel-Chaos