Skip to content

Multistreaming

Multistreaming lets you push a single live broadcast to multiple external platforms at once. When your stream goes live, FrameWorks automatically pushes to every enabled target — no third-party restreaming service required.

Each enabled live destination uses one slot from your existing viewer-capacity limit. There is no separate restream quota. Restream runtime and bytes are reported as delivered minutes and egress, while audience analytics continue to count human playback sessions only.

That keeps the operational source of truth in one place: one ingest, one set of playback policies, one DVR archive, one analytics surface, and multiple distribution endpoints.

flowchart LR
    ENC[One encoder] --> ORIGIN[FrameWorks origin edge]
    ORIGIN --> VIEWERS[FrameWorks playback]
    ORIGIN --> TW[Twitch]
    ORIGIN --> YT[YouTube]
    ORIGIN --> OTHER[Other RTMP · RTMPS · SRT target]
    CONTROL[Push-target settings] -. start, stop, and status .-> ORIGIN
  1. Configure targets — Add push targets to your stream via the dashboard or API
  2. Go live — Start broadcasting as usual (OBS, StreamCrafter, SRT, etc.)
  3. Automatic push — FrameWorks detects the stream going live and pushes to all enabled targets
  4. Automatic stop — When your stream ends, all pushes stop automatically

Each push target has a live status indicator: pending, pushing, retrying, stopping, idle, or failed. The control plane stores a bounded machine reason separately from the sanitized operator-facing error detail.

PlatformConfiguration source
TwitchCopy the current server URL and key from Creator Dashboard
YouTubeCopy them from Live Control Room
FacebookCopy them from Live Producer
KickCopy them from Creator Dashboard
X (Twitter)Copy them from Media Studio or Producer
CustomSupply a complete rtmp://, rtmps://, or srt:// URI

Destination endpoints can change, so copy the current URL and stream key from the destination’s own dashboard. FrameWorks stores the complete target URI; the platform preset only labels the destination.

In the stream detail page, open the Multistream tab to manage push targets.

  • Add Target — Select a platform, enter your stream key, and give it a name
  • Enable/Disable — Toggle targets on or off without deleting them
  • Status — See real-time push status for each target
  • Edit — Update the name, stream key, or target URI at any time
  • Delete — Remove targets you no longer need
mutation {
createPushTarget(
streamId: "stream-global-id"
input: {
platform: "twitch"
name: "My Twitch Channel"
targetUri: "rtmp://live.twitch.tv/app/live_xxxxxxxxxxxx"
}
) {
id
name
platform
targetUri
isEnabled
status
reasonCode
}
}

Push targets are available as a field on the Stream type:

query {
stream(id: "stream-global-id") {
id
name
pushTargets {
id
name
platform
targetUri
isEnabled
status
reasonCode
lastError
lastPushedAt
}
}
}

Use reasonCode for automation and lastError for sanitized operator-facing detail. The stable reason values are unspecified, connected, completed, destination_rejected, network_error, process_error, capacity_exhausted, configuration_error, edge_upgrade_required, and stopped.

mutation {
updatePushTarget(id: "push-target-global-id", input: { isEnabled: false }) {
id
isEnabled
status
}
}
mutation {
deletePushTarget(id: "push-target-global-id") {
success
deletedId
}
}

Each push target consumes upstream bandwidth on the origin node proportional to your stream’s bitrate. For a 6 Mbps stream with 3 push targets, the origin node uses ~18 Mbps of upload bandwidth for multistreaming alone.

Keep this in mind when:

  • Streaming at high bitrates (4K, high-FPS)
  • Adding many simultaneous targets
  • Using nodes with limited upload capacity

Target shows “failed” status

  • Verify your stream key is correct and hasn’t expired
  • Check that the platform isn’t blocking your IP or account
  • Some platforms require additional setup (e.g., Facebook requires creating a live broadcast first)

Push doesn’t start when stream goes live

  • Ensure the target is enabled (not just created)
  • Check that your stream is actually live on the origin node
  • Review the event log on the stream detail page for errors

External playback is behind the FrameWorks stream

  • Destination platforms apply their own ingest processing and playback buffers.
  • Compare the origin stream and the destination’s ingest-health view before treating the delay as a FrameWorks incident.