Skip to content

Live video

Real-time calls, without running real-time infrastructure

Browsers encode with WebCodecs and send binary frames over one WebSocket. Synento relays them to everyone in the session and writes them to durable streams as they pass.

Live video

  • Camera, mic and screen

    Publish any combination, audio-only included. Screen share works in both directions.

  • Automatic reconnection

    A dropped connection resumes without a page reload, and fresh tokens are fetched as it does.

  • Up to 16 per room

    Rooms hold up to 16 participants by default. A full room refuses new joins and never degrades calls already running.

  • Codec-agnostic relay

    Frames are self-describing, and the server never parses a payload. That is why it doesn't need to scale like an SFU.

  • Chat alongside media

    Messages travel with the session and are stored in its own durable stream, so they are part of the recording too.

  • Checked before joining

    WebCodecs support is detected before a call starts, so nobody joins a call that can't work.

call.ts
import { SynentoRoom } from '@synento/client'

const room = new SynentoRoom({
  userId: 'alice',
  // Called again on every reconnect, so tokens rotate on their own.
  getToken: () =>
    fetch('/api/synento', {
      method: 'POST',
      body: JSON.stringify({ sessionId, userId: 'alice' }),
    }).then((res) => res.json()),
})

await room.connect()

const stream = await navigator.mediaDevices.getUserMedia({ audio: true, video: true })
await room.publishCamera(stream)
// That's it. There is no "start recording" call.

The honest trade-off

Latency is sub-second but higher than peer-to-peer WebRTC. If sub-200 ms is a hard requirement, a WebRTC platform is the better fit, and our comparisons say which one.

Give your agent a video platform it can verify.

Sign up, point your agent at llms.txt, and have a recorded call running before lunch.