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
Lifecycle
Section titled “Lifecycle”- Configure targets — Add push targets to your stream via the dashboard or API
- Go live — Start broadcasting as usual (OBS, StreamCrafter, SRT, etc.)
- Automatic push — FrameWorks detects the stream going live and pushes to all enabled targets
- 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.
Supported platforms
Section titled “Supported platforms”| Platform | Configuration source |
|---|---|
| Twitch | Copy the current server URL and key from Creator Dashboard |
| YouTube | Copy them from Live Control Room |
| Copy them from Live Producer | |
| Kick | Copy them from Creator Dashboard |
| X (Twitter) | Copy them from Media Studio or Producer |
| Custom | Supply 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.
Dashboard
Section titled “Dashboard”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
GraphQL API
Section titled “GraphQL API”Add a Push Target
Section titled “Add a Push Target”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 }}List Push Targets
Section titled “List Push Targets”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.
Update a Push Target
Section titled “Update a Push Target”mutation { updatePushTarget(id: "push-target-global-id", input: { isEnabled: false }) { id isEnabled status }}Delete a Push Target
Section titled “Delete a Push Target”mutation { deletePushTarget(id: "push-target-global-id") { success deletedId }}Bandwidth Considerations
Section titled “Bandwidth Considerations”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
Troubleshooting
Section titled “Troubleshooting”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.