Skip to main content

Screen Streaming (WebRTC)

Real-time screen streaming from devices via WebRTC signaling over WebSocket.

Source: src/screen-streaming/

REST Endpoints

MethodEndpointDescription
GET/screen-streaming/activeList active streams
GET/screen-streaming/:deviceId/broadcastingCheck if device is broadcasting
GET/screen-streaming/:deviceId/viewersGet viewer count
POST/screen-streaming/:deviceId/stopForce stop streaming
GET/screen-streaming/ice-serversGet ICE/TURN server config

WebSocket Gateway

Namespace: screen-streaming

Events

EventDirectionDescription
screen:join-as-broadcasterClient → ServerDevice starts broadcasting
screen:join-as-viewerClient → ServerUser joins as viewer
screen:offerPeer → Server → PeerWebRTC SDP offer
screen:answerPeer → Server → PeerWebRTC SDP answer
screen:ice-candidatePeer → Server → PeerICE 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 metadata
  • broadcasters: Map of deviceId → socket ID
  • RemoteControlModule — Remote device interaction
  • EventsModule — WebSocket infrastructure