Screen Streaming (WebRTC)
Real-time screen streaming from devices via WebRTC signaling over WebSocket.
Source: src/screen-streaming/
REST Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /screen-streaming/active | List active streams |
GET | /screen-streaming/:deviceId/broadcasting | Check if device is broadcasting |
GET | /screen-streaming/:deviceId/viewers | Get viewer count |
POST | /screen-streaming/:deviceId/stop | Force stop streaming |
GET | /screen-streaming/ice-servers | Get ICE/TURN server config |
WebSocket Gateway
Namespace: screen-streaming
Events
| Event | Direction | Description |
|---|---|---|
screen:join-as-broadcaster | Client → Server | Device starts broadcasting |
screen:join-as-viewer | Client → Server | User joins as viewer |
screen:offer | Peer → Server → Peer | WebRTC SDP offer |
screen:answer | Peer → Server → Peer | WebRTC SDP answer |
screen:ice-candidate | Peer → Server → Peer | ICE candidate exchange |
Signaling Flow
Device (Broadcaster) Server Viewer
│ │ │
├── join-as-broadcaster ────→ │ │
│ │ ←── join-as-viewer ┤
│ ←────── screen:offer ────── │ │
│ │ ──── screen:offer → │
│ │ ←── screen:answer ──┤
│ ──── screen:answer ───────→ │ │
│ ←── ice-candidate ─────────→│←── ice-candidate ──┤
│ (bidirectional ICE exchange) │
Internal State
The service maintains in-memory maps:
activeStreams: Map of deviceId → stream metadatabroadcasters: Map of deviceId → socket ID
Related Modules
RemoteControlModule— Remote device interactionEventsModule— WebSocket infrastructure