docs: Streaming-60fps-Task fuer Autopilot (M4) - hohe Aufloesung + 60 FPS, Ist-Analyse + Umsetzungsschritte
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
# Streaming: hohe Auflösung + 60 FPS (M4)
|
||||
|
||||
**Ziel (Bernd):** Bildschirm-Streams ruckeln aktuell. Es soll eine hohe Streaming-Einstellung
|
||||
geben – hohe Auflösung UND hohe FPS, idealerweise **60 FPS**, flüssig.
|
||||
|
||||
## Ist-Zustand (im Code gefunden, 2026-07-06)
|
||||
|
||||
Datei `lib/features/voice_channel/livekit_call_manager.dart`:
|
||||
- `qualityPresets` (~Z. 21): Auflösungs-Presets `sd`(360p) / `hd`(720p) / `fhd`(1080p) / `4k`(2160p).
|
||||
- `_screenShareEncodings` (~Z. 28): **FPS hart gedeckelt** – `sd`=10, `hd`=15, `fhd`=20, `4k`=30.
|
||||
**Es gibt KEIN 60-FPS-Preset.** Bitraten für hohe FPS zu niedrig (fhd nur 2,5 Mbit/s @20,
|
||||
4k nur 4 Mbit/s @30).
|
||||
- `startScreenShare` (~Z. 453): erstellt `ScreenShareCaptureOptions(maxFrameRate: …)` und
|
||||
published mit `simulcast: true`, `degradationPreference: DegradationPreference.balanced`.
|
||||
- **`contentHint` wird NICHT gesetzt** → der Encoder weiß nicht, dass es bewegtes Video ist,
|
||||
und priorisiert Detail/Auflösung statt Framerate → Ruckeln.
|
||||
- `_applyFpsToAllSimulcastLayers` (~Z. 485) hebt die FPS nachträglich auf allen Simulcast-Layern an.
|
||||
|
||||
UI `lib/features/call_ui/view/quality_menu.dart` (~Z. 21): „SENDEN"-Menü listet sd/hd/fhd/4k.
|
||||
|
||||
## Wahrscheinliche Ruckel-Ursachen
|
||||
1. `maxFramerate` hart auf 20–30 begrenzt (nie 60).
|
||||
2. Zu niedrige Bitrate für hohe FPS → Encoder verwirft/verwischt Frames.
|
||||
3. `contentHint` nicht auf `motion` → Encoder opfert FPS für Detail.
|
||||
4. `degradationPreference: balanced` → unter Last sinkt eher die FPS als die Auflösung.
|
||||
|
||||
## Aufgabe
|
||||
1. **Neue High-FPS-Presets** für die Send-Qualität, z. B.:
|
||||
- `hd60` → 720p, `VideoEncoding(maxBitrate ~4–5 Mbit/s, maxFramerate 60)`
|
||||
- `fhd60` → 1080p, `VideoEncoding(maxBitrate ~6–8 Mbit/s, maxFramerate 60)`
|
||||
Sowohl in `qualityPresets` (Auflösung) als auch `_screenShareEncodings` (Bitrate/FPS) eintragen
|
||||
und im „SENDEN"-Menü in `quality_menu.dart` als „HD 60fps" / „Full HD 60fps" ergänzen.
|
||||
2. **`contentHint = 'motion'`** auf dem Screenshare-Track setzen (flutter_webrtc/LiveKit-Feld) –
|
||||
wichtigster Einzelhebel gegen Ruckeln bei Bewegung.
|
||||
3. Für die 60-FPS-Modi **`degradationPreference: DegradationPreference.maintainFramerate`**
|
||||
statt `balanced` (unter Last lieber Auflösung senken als FPS).
|
||||
4. Sicherstellen, dass 60 wirklich durchgereicht wird – auch in `ScreenShareCaptureOptions.maxFrameRate`
|
||||
und `_applyFpsToAllSimulcastLayers`.
|
||||
5. Für den flüssigen 60-FPS-Modus **`simulcast: false` erwägen** (volle Bitrate auf einen Layer),
|
||||
A/B gegen simulcast=true testen.
|
||||
|
||||
## Testen (mit den Test-Accounts)
|
||||
- Streamen als pyramidtest1, zuschauen als pyramidtest2 (zwei Logins/Fenster).
|
||||
- Prüfen, dass `sender.parameters.encodings` real `maxFramerate == 60` und die hohe `maxBitrate` tragen.
|
||||
- Subjektiv: flüssiger? Bei Bewegung kein Ruckeln?
|
||||
- EHRLICH protokollieren, was wirklich getestet wurde. Echtes flüssiges 60-FPS-Empfinden ist ggf.
|
||||
nur mit echtem Gerät/Netz voll beurteilbar → dann klar als UNGETESTET markieren.
|
||||
|
||||
## Nicht vergessen
|
||||
`flutter analyze` sauber, kleiner Commit + Push, PROGRESS.md + ROADMAP (M4) pflegen.
|
||||
Reference in New Issue
Block a user