getUserMedia · getDisplayMedia · file track
Voice and video that belong in your product — not in a vendor black box.
Publish, route, relay, and recover — the full call lifecycle on your infrastructure, with diagnostics you can actually show to support teams.
Camera, mic, screen share, detached video file — same room API.
Remote tracks with simulcast layer preference and mute/hold semantics.
ICE, STUN/TURN, relay-only policy.
Resume tokens, message replay, ICE restart, SFU transport rebuild.
Room topology
Mesh for small groups. SFU when fan-out demands it.
Topology is selected by server policy at join (RTC_TOPOLOGY) — not an automatic silent failover. Mesh peers negotiate directly; SFU mode routes tracks through mediasoup (production default).
- Mesh
- Best for 1:1 and small groups — lowest server media load, highest client uplink.
- SFU
- Scales participant count — each publisher sends once; subscribers receive independent layers.
- Cascade
- Regional SFU links for large-room topologies (see large-room-topology example).
Same SDK integration — topology comes back in room.joined.
Layer preference and bandwidth-aware subscription in SFU mode.
Server-side RTP forwarding — production-ready today.
Integrated UDP path — active hardening, not universal GA yet.
Publishing
One SDK surface for every capture source.
Integrators call the same room methods for webcam, screen share, or a pre-recorded clip. Detaching a file track triggers renegotiation like any other publisher change — no special-case product code.
- publishCamera() / publishMicrophone() Device selection helpers in browser SDK.
- publishScreen() Display capture with browser permission UX.
- Video file attach Kitchen-sink demo validates publish/detach/renegotiate flow.
- Effects pipeline Optional blur, noise suppression, insertable streams on supported Chromium builds.
Device pickers · fake tracks for tests
<video> elements · worker track tap
RTT · loss · FPS · outbound/inbound bitrate
Connectivity
ICE, STUN, and first-party TURN — built for enterprise networks.
Dynamic TURN credentials are minted at join — short-lived, tenant-scoped, bandwidth-metered. Enforce relay-only for strict corporate networks via RTC_ICE_POLICY. IPv6 and regional credential routing supported.
Fresh ICE servers on reconnect — no static TURN passwords in client bundles.
Built-in test harness proves UDP relay path locally and in CI — no external dependency.
CPU and bandwidth accounting on relay — capacity planning inputs for ops.
Candidate types, selected pair, relay vs host — visible in kitchen-sink stats panel.
Note
Reconnection
Calls that survive tab sleep, Wi‑Fi handoff, and brief outages.
The browser SDK exposes an observable reconnect pipeline: Detect → Reconnect → Resume → Replay → Repair → Confirm → Restored. Participants rejoin with resume tokens; missed chat messages replay from server cursor.
- reconnectStageChanged Show accurate UI during each recovery phase.
- messageReplayed Chat continuity after signaling reconnect.
- mediaRecovered Emitted only after quality sampling confirms healthy FPS/loss.
- Guardrails Resume requires matching JWT subject; duplicate tabs get PARTICIPANT_ID_CONFLICT.
Note
MessageStorageAdapter. See the reconnection guide for full detail.Observability
See what users experience — not just "connected: true".
Live quality scoring, session topology graphs, RTC inspector overlays, exportable redacted support bundles, and OpenTelemetry hooks give your support and engineering teams the same visibility TomatoRTC uses internally.
Per-track RTT, jitter, packet loss, FPS, bandwidth — mesh and SFU paths.
Visual mesh/SFU/cascade layout — who connects to whom.
Redacted JSON export for ticket attachment — no raw media.
Kitchen-sink tool validates publish/subscribe through SFU path in two tabs.
Prove it
Two tabs. One afternoon. Full media path validated.
Minimal two-tab camera + mic demo — fastest A/V smoke test.
Screen share, video file, SFU probe, stats, chaos/reconnect lab, TURN relay indicators.
Cascaded SFU visualization and regional routing concepts.
Run dev:server:sfu:https then dev:kitchen-sink:https to test the full SFU path locally.
Ship calls your team can support — then add AI in the same room.
- 1 Two-tab kitchen-sink
Publish A/V, screen, file — check stats and topology
- 2 TURN relay test
Run the relay test harness locally — confirms UDP traversal before prod deployment.
- 3 Voice AI deck
Agents as service participants · Technical architecture