28 lines
1.3 KiB
Markdown
28 lines
1.3 KiB
Markdown
# CallControls Component
|
|
|
|
## Zweck
|
|
- Steuert Anrufstart als Initiator, Mikrofonberechtigungen und Mute/Ende-Interaktionen.
|
|
- Wird innerhalb des `ControlDock` (sticky Bottom-Bar) dargestellt.
|
|
|
|
## Kernfunktionen
|
|
- `request_microphone_access()`: nutzt `MediaManager` zum Einholen des MediaStreams und speichert ihn in `local_media` Signal.
|
|
- `create_offer()`: Erstellt und sendet Offer via Signaling, registriert `onicecandidate` & `ontrack`.
|
|
- `mute / end`: Lokalen Zustand aktualisieren, PeerConnection schließen.
|
|
|
|
## Signalübersicht
|
|
- `mic_granted`, `audio_muted`, `in_call`: UI States.
|
|
- Teilt `peer_id`, `remote_id`, `connected`, `websocket`, `peer_connection` (Initiator), `local_media` mit anderen Komponenten.
|
|
|
|
## Workflow
|
|
1. **Mikrofon freigeben** → Tracks werden zur PeerConnection hinzugefügt.
|
|
2. **Anruf starten** → PeerConnection erzeugen, Offer senden, auf Answer warten.
|
|
3. **Mute/Unmute** → Aktuell nur UI-State, TODO: Track-`enabled` toggeln.
|
|
4. **Anruf beenden** → PeerConnection schließen, Signals resetten.
|
|
|
|
## TODOs
|
|
- Realer Mute/Unmute über `MediaStreamTrack.enabled`.
|
|
- Visuelle Feedback-Elemente (Button-States im Discord-Stil).
|
|
- Device-Auswahl (Audio Output/Input) vor dem Start.
|
|
- Error-Toasts (z. B. wenn Offer scheitert).
|
|
- Aktive Call-State-Anzeige im ControlDock (z. B. Dauer, zweiter Channel).
|