Build Interactive Video Calls
What you'll build
An interactive, multi-participant video experience where every participant can broadcast and view each other in near-real time. On Native Frame, this is powered by WebRTC, so it fits use cases where sub-second latency matters: group calls, gated 1:1 sessions, live Q&A, and interactive streaming. This recipe doesn't re-teach each building block — it stitches the existing guides together in the right order so you can go from credentials to a working call.
Architecture at a glance
Interactive video on Native Frame runs through a Selective Forwarding Unit (SFU): each participant publishes their own media and subscribes to everyone else's, all through the SFU rather than peer-to-peer. Three things shape the experience:
- Tokens and scopes decide who can broadcast versus who can only view, and gate access to private sessions.
- The SFU fans out each participant's stream to the others with low latency.
- Webhooks give your backend real-time signal and control — who joined, who's broadcasting, and the ability to kick or stop.
For a deeper look at how the SFU, signaling, and media planes fit together, see Platform architecture. For why WebRTC is the right transport for interactivity, see Streaming protocols.
Build it
Work through these in order. Each step links the canonical guide — follow it there for the full code.
-
Mint scoped tokens. Start by issuing the right credentials: broadcaster tokens for participants who publish, viewer tokens for watch-only, and private scopes for gated sessions. See Token setup.
-
Create a group call. Stand up the room that participants publish and subscribe through. See Create a group call, with concept background in Group calls.
-
Add a lobby and screenshare. Let participants preview devices before joining with a Call lobby, and let them share their screen with Screenshare.
-
Or run gated private calls. For 1:1 or invite-only sessions, use private scopes instead of an open room — set up the Private broadcaster and Private viewer.
-
Wire webhook-based control. Subscribe to session state so your backend can react in real time — admit, kick, or stop participants. See Webhooks and state.
Scopes are your access-control layer. Issue narrow tokens (viewer-only, time-bound, session-scoped) by default and widen only when a participant genuinely needs to broadcast.
Choosing group vs private
- Group calls — an open, multi-participant room where anyone with a valid token can join and broadcast. Best for standups, classes, panels, and social gatherings where the participant list is fluid.
- Private calls — gated sessions where access is scoped to specific broadcasters and viewers. Best for 1:1 consults, paid or invite-only sessions, and anywhere you need tight control over exactly who can join.
Both run on the same WebRTC + SFU foundation, so you can start with a group call and layer in private-call scoping as your access rules get stricter.