From 5f0e6a2b7967f5c7f3a102aee26dcac349941419 Mon Sep 17 00:00:00 2001 From: ghost Date: Thu, 30 Oct 2025 19:07:33 +0100 Subject: [PATCH] Add initial voice channel docs --- docs/architecture/signaling_flow.md | 24 ++++++++++++++++++++++++ docs/components/call_controls.md | 25 +++++++++++++++++++++++++ docs/components/connection_panel.md | 24 ++++++++++++++++++++++++ docs/components/status_display.md | 13 +++++++++++++ docs/config/config_management.md | 23 +++++++++++++++++++++++ docs/index.md | 18 ++++++++++++++++++ docs/utils/media_manager.md | 22 ++++++++++++++++++++++ 7 files changed, 149 insertions(+) create mode 100644 docs/architecture/signaling_flow.md create mode 100644 docs/components/call_controls.md create mode 100644 docs/components/connection_panel.md create mode 100644 docs/components/status_display.md create mode 100644 docs/config/config_management.md create mode 100644 docs/index.md create mode 100644 docs/utils/media_manager.md diff --git a/docs/architecture/signaling_flow.md b/docs/architecture/signaling_flow.md new file mode 100644 index 0000000..8071438 --- /dev/null +++ b/docs/architecture/signaling_flow.md @@ -0,0 +1,24 @@ +# Signaling & Media Flow + +Dieses Dokument beschreibt, wie das Voice-Channel-Modul mit Signaling-Server (`niom-signaling`) und TURN-Server (`niom-turn`) interagiert. + +## Beteiligte Dienste +- **Client (`niom-webrtc`)**: Dioxus-Frontend im Browser. Baut PeerConnections, verwaltet UI-Zustand und kommuniziert mit Signaling per WebSocket. +- **Signaling (`niom-signaling`)**: Actix-Web-Server, der Nachrichten zwischen Peers austauscht. Derzeit Broadcast, später rooms. +- **TURN (`niom-turn`)**: UDP/TLS TURN-Server mit STUN-Fallback. Sorgt für NAT-Traversal, sobald ICE-Candidates verwendet werden. + +## Flow (MVP Heutiger Stand) +1. **WebSocket-Aufbau**: `ConnectionPanel` verbindet sich zu `ws://localhost:3478/ws`. +2. **Peer-ID**: Clients generieren lokale IDs; Remote-ID wird manuell eingetragen. +3. **Offer/Answer**: + - Initiator (`CallControls`) baut `RtcPeerConnection`, hängt lokale Audio-Tracks an und erzeugt ein Offer (SDP). + - Offer wird via Signaling an Remote gesendet. + - Responder (`ConnectionPanel` Coroutine) erstellt eigene PeerConnection und generiert eine Answer. +4. **ICE-Kandidaten**: Beide PeerConnections senden `candidate`-Messages an Signaling. Kandidaten werden dynamisch hinzugefügt. +5. **Medien**: `ontrack`-Handler erzeugt `