Callaba
Toggle documentation navigation
Callaba home

Multiview

Multiview monitors RTSP, SRT, RTMP, or NDI inputs together in one browser-based multiviewer. Add a camera or media-server RTSP URL directly; an SRT or RTMP conversion stage is not required just to show it on the board.

What it doesBuild a live operator multiview

Choose this whenOperators need one browser wall for multiple SRT, RTMP, or NDI feeds.

Use another module whenUse Web Players for audience playback; Multiview is the operator monitoring surface.

1Add live inputs2Arrange the tiles3Open the multiviewer
POST /api/multiview/create
12 endpoints

Before you start

Use x-access-token to configure, start, stop, and create authenticated viewer sessions. If visibility is PUBLIC, anyone with the multiview ID can use its public view, statistics, and join methods, so share the ID only as widely as intended.

What you can do

  • create stores the multiview, layout, visibility, and initial inputs; an empty input list is valid.
  • update applies the complete desired input list and layout.
  • getAll, getCount, and getById inspect saved multiviews.
  • start and stop control the monitoring runtime.
  • join returns the browser session details for an authorized viewer.
  • remove deletes the multiview.

Example workflow

  1. Create a private multiview with the required layout; the input list can initially be empty.
  2. Update it with the full set of RTSP, SRT, RTMP, or NDI inputs.
  3. Start the multiview and call the authenticated join method.
  4. Open the returned viewer session and confirm each input's live status.
  5. Send the full desired list on later updates; omitted inputs are detached.

Common use cases

  • Monitor RTSP cameras directly without building a separate SRT/RTMP bridge.
  • Monitor primary and backup contribution feeds in a control room.
  • Give a remote producer one view of cameras, program output, and return feeds.
  • Compare regional or language outputs before distribution.

Limits and troubleshooting

Correct missing or invalid names, RTSP URLs, input IDs, visibility, or participant data before retrying. A multiview can remain available while one of its inputs is offline, so check each input's live status separately. Add a processing pipeline only when a source needs transcoding, resizing, audio changes or a separate delivery protocol.

Next steps

Connect the intended feeds, validate the join experience, and expose public access only when the multiview is meant to be shared.

REST solution recipe

Create and manage an operator multiview

Create the wall with reviewed input tiles, update the layout without replacing its identity, start it, and inspect the saved resource before sharing a public room.

  1. Create the video wallDefine source tiles, layout, visibility, and operator settings.POST /api/multiview/create
  2. Update tiles and layoutSend the existing id with the complete desired room, source, visibility, and layout state.POST /api/multiview/update
  3. Start the wallStart the saved multiview only after its input resources are available.POST /api/multiview/start
  4. Read the managed wallConfirm the saved source and visibility state through the authenticated resource before exposing a public id.POST /api/multiview/getById
  5. Read room statusUse the public status call only for an intentionally public room.POST /api/multiview-public/getStat

Treat a public multiview id as shareable access material. Keep private operator walls behind the authenticated management methods.

Multi-module workflow

Ingest one contribution feed, monitor it in Multiview, and record it

Provision SRT ingest first, attach its returned resource id to a private Multiview tile, then reuse the same healthy source in a recording job.

  1. Create contribution ingestConfigure the listener, access policy, latency, and routing; retain the returned SRT server id.POST /api/srt-servers/create
  2. Start the ingestStart the listener and confirm the contribution source is connected before building downstream resources.POST /api/srt-servers/start
  3. Create the private wallCreate the Multiview shell with its layout, visibility, and overlay settings.POST /api/multiview/create
  4. Attach the SRT tileSet the tile source_id to the SRT server id and use the documented SRT software source kind.POST /api/multiview/update
  5. Start operator monitoringStart the updated wall and join it through the authenticated operator path.POST /api/multiview/start
  6. Create the archive jobSelect the same SRT server through the recording module's SRT input preset and choose the archive format and mode.POST /api/recording/create
  7. Start captureStart recording only after ingest and the operator wall are stable.POST /api/recording/start
  8. Verify capture healthMonitor bitrate, frame cadence, output time, speed, and progress independently from the wall.POST /api/recording/getStat

Create Multiview currently starts with an empty inputs list. Add the SRT tile with update, using source_kind INPUT_TYPE_SRT_SOFTWARE and the SRT server id as source_id. The recording create call needs its own SRT input preset; the Multiview id is not a recording source id.

POST
/api/multiview/create
API token required

Create a multiview and, unless active is false, start its inputs and conference. The user scope comes from the API token; do not send user_id.

Next call: use getById to read the saved inputs, then join for an operator token.

A 400 response uses { success: false, status, code, message, details }.

Request body parameters
Identity
name
string
Copy direct link

Required operator-facing name, 1–120 characters.

Layout
layout_id
string
Copy direct link

Optional layout identifier. The Engine defaults to 4-tiles.

overlay_settings
object
Copy direct link

Optional overlay configuration stored with the wall.

Inputs
inputs
array
Copy direct link

Optional input definitions. Supported runtime source kinds include direct RTSP plus SRT, RTMP, and NDI variants; start with an empty array when you want to provision the wall before attaching feeds.

Access
visibility
string
Copy direct link

Optional PRIVATE or PUBLIC. The default is PRIVATE.

Runtime
active
boolean
Copy direct link

Optional initial runtime state. Defaults to active unless explicitly set to false.

Create multiview
Copy code
curl --request POST \
--url http://localhost/api/multiview/create \
--header 'x-access-token: <your_api_token>' \
--header 'Content-Type: application/json' \
--data '{
"name": "Master control multiview",
"layout_id": "4-tiles",
"visibility": "PRIVATE",
"overlay_settings": {},
"inputs": [],
"active": true
}'
Response
Identity
id
string
Copy direct link

Stable multiview identifier.

name
string
Copy direct link

Operator-facing name.

Layout
layout_id
string
Copy direct link

Selected tile layout, for example 4-tiles.

inputs
array
Copy direct link

Normalized video inputs and their runtime bindings.

Access
visibility
string
Copy direct link

PRIVATE or PUBLIC.

Runtime
conference_id
string
Copy direct link

Conference backing the operator viewing surface.

active
boolean
Copy direct link

Whether the multiview runtime should be active.

Response: Create multiview
JSON
Copy code
{
"_id": "6b0011223344556677889900",
"id": "6b0011223344556677889900",
"name": "Master control multiview",
"conference_id": "6b1011223344556677889900",
"layout_id": "4-tiles",
"visibility": "PRIVATE",
"overlay_settings": {},
"inputs": [
{
"id": "camera-a",
"name": "Camera A",
"source_kind": "INPUT_TYPE_SRT_SOFTWARE",
"source_id": "6b2011223344556677889900",
"participant_name": "Camera A",
"resolution": "1920x1080",
"video_codec": "libx264",
"video_bitrate": 1350,
"tile_index": 0,
"muted": false,
"hidden": false,
"volume": 1
}
],
"active": true,
"created": "2026-06-25T10:00:00.000Z",
"modified": "2026-06-25T10:00:01.000Z",
"success": true
}
POST
/api/multiview/update
API token required
POST
/api/multiview/getCount
API token required
POST
/api/multiview/getAll
API token required
POST
/api/multiview/getById
API token required
POST
/api/multiview/start
API token required
POST
/api/multiview/stop
API token required
POST
/api/multiview/join
API token required
POST
/api/multiview-public/getById
Public endpoint
POST
/api/multiview-public/getStat
Public endpoint
POST
/api/multiview-public/join
Public endpoint
DELETE
/api/multiview/remove
API token required