Service: Symphony Media Bridge - EyevinnOSC/community GitHub Wiki

Getting Started

Symphony Media Bridge is an open source WebRTC Selective Forwarding Unit (SFU) that routes real-time media between participants without transcoding. By forwarding streams selectively rather than mixing them, it reduces server CPU usage while giving each participant control over which streams they receive. It is suited for multi-participant video conferencing, live production workflows, and WebRTC distribution applications. Available as an open web service in Eyevinn Open Source Cloud.

Prerequisites

Step 1: Create a Symphony Media Bridge instance

Navigate to the Symphony Media Bridge service in the Eyevinn OSC web console. Click Create docker-wrtc-sfu and fill in:

Field Description
Name Short alphanumeric name for your instance
ApiKey API key for authenticating HTTP API requests. The default value is eyevinn — change this for any production deployment.
VideoCodec Optional. Video codec used by the bridge: VP8 (default) or H264.
H264ProfileLevelId Optional. H264 profile-level-id. Default 42001f. Use 42e01f (Constrained Baseline), which WebRTC mandates and Safari expects.
H264PacketizationMode Optional. H264 packetization mode. Default 1.
RctlInitialEstimate Optional. Initial bandwidth estimate in kbps. Default 1200. Consumers that do not send REMB (for example GStreamer webrtcbin) stay at this estimate.
RctlFloor Optional. Rate control floor in kbps. Default 300.
RctlCeiling Optional. Rate control ceiling in kbps. Default 9000.

Click the instance card once the status turns green and running.

Store your ApiKey as an OSC Service Secret and reference it with {{secrets.apikey}} rather than entering it in plaintext. See Working with Secrets.

Video codec and rate control: Leave the optional fields empty to keep the defaults (VP8). Set VideoCodec to H264 when you need to bridge to H264-based tooling such as SRT/MPEG-TS gateways. These settings are read when the instance starts and cannot be changed on a running instance. To change them, delete and recreate the instance.

Step 2: Verify the instance is running

The SFU exposes a health endpoint:

curl https://<your-instance-url>/api/health

A 200 OK response confirms the bridge is ready.

Step 3: Interact with the HTTP API

All management endpoints require the api-key header:

# List active conferences
curl https://<your-instance-url>/api/conferences \
  -H "api-key: <your-api-key>"
# Create a conference
curl -X POST https://<your-instance-url>/api/conferences \
  -H "Content-Type: application/json" \
  -H "api-key: <your-api-key>" \
  -d '{"last-n": 3}'

The response includes a id field identifying the new conference. Use this ID to add endpoints and manage participants.

Step 4: Connect participants

Participants connect via WebRTC using the SFU's signaling API. The typical flow:

  1. Create a conference (Step 3)
  2. Create an endpoint for each participant: POST /api/conferences/{conferenceId}/endpoints
  3. Exchange SDP offer/answer through the endpoint API
  4. The SFU forwards media streams between endpoints

See the Symphony Media Bridge documentation for the full signaling protocol and SDP exchange details.

CLI usage

osc create eyevinn-docker-wrtc-sfu mysfu -o ApiKey="mysecretkey"

To use H264 instead of VP8:

osc create eyevinn-docker-wrtc-sfu mysfu \
  -o ApiKey="mysecretkey" \
  -o VideoCodec="H264" \
  -o H264ProfileLevelId="42e01f"

Resources