> For the complete documentation index, see [llms.txt](https://captivatehelp.newbluelive.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://captivatehelp.newbluelive.com/set-up-your-production/chapter-index-6/set-up-streaming.md).

# Streaming with Captivate

Captivate sends your program output to live-streaming services in real time. You tell it **where** the program goes by building a list of destinations: a YouTube channel, a Twitch channel, a hardware decoder over SRT, an RTMP server of your own. Switch on the ones you want on air, and they all receive the broadcast.

This article covers the dialog where that list lives and how to get a stream running. For SRT specifically, see [Stream with SRT](/set-up-your-production/chapter-index-6/streaming-with-srt.md). For sending the same program to several places at once, see [Stream to multiple destinations](/set-up-your-production/chapter-index-6/streaming-to-multiple-destinations.md).

## Open the Streaming dialog

There are two ways in, and they behave differently on purpose:

* **Settings** > **Streaming…** opens the dialog to set things up. Its main button reads **Save Settings**, and closing it never puts you on air. Use this before the show.
* **Start Streaming** on the top bar is the on-air control. If a destination is already switched on and ready to go, Captivate starts streaming immediately. If nothing is ready, the Streaming dialog opens instead — with its main button reading **Start Streaming** — so you can fix what’s missing and go live from there.

So **Start Streaming** is safe to press when you’re not sure of the state of things: either you’re on air because a destination was ready, or you’re looking at the dialog that tells you what’s missing.

## How the dialog is arranged

Your destinations are listed down the left under **YOUR DESTINATIONS**; the one you’ve selected is edited on the right. Everything happens in this one window — there’s no wizard and no separate setup step.

The first time you open it, the list is empty and Captivate says **Nowhere to stream yet**. Click **Add Destination** to begin.

## Add a destination

1. Click **Add Destination** below the list.
2. The **Add a Destination** window asks what kind of destination this is, grouped into **SOCIAL** and **PROTOCOLS**. Start typing in the **Search** box to narrow the list, or use the arrow keys and press Enter.
3. Pick a type and click **Add**.

The built-in types are:

| Type             | What it’s for              |
| ---------------- | -------------------------- |
| YouTube Live     | Live over RTMPS            |
| Twitch           | Live over RTMP             |
| Facebook Live    | Live over RTMPS            |
| X (Twitter)      | Live over RTMP             |
| LinkedIn Live    | Live over RTMPS            |
| Switchboard Live | Relay to several platforms |
| Custom RTMP      | Any server URL and key     |
| SRT              | Caller or listener         |

This window only asks what **kind** of destination you’re adding — you fill in the details in the main editor afterwards.

{% hint style="info" %}
You’ll only see the types your license includes. A type your license doesn’t cover isn’t listed at all, rather than shown greyed out — so if **SRT** isn’t in the list, that’s why. See [Feature availability by edition](/reference/entitlements-sku-matrix.md).
{% endhint %}

## Fill in the details

The editor on the right shows the fields that type needs. For the RTMP services that’s a **Server URL** and a **Stream Key**; SRT asks for a mode, host, and port instead (see [Stream with SRT](/set-up-your-production/chapter-index-6/streaming-with-srt.md)).

* **Stream keys and passphrases are masked.** Click **Show** to check what you pasted, and **Hide** to cover it again.
* **Most services link straight to the page that issues the key** — for example **Get your stream key from YouTube Studio**. Click it to open that page in your browser.
* **Name** it something you’ll recognize on the night, especially if you run more than one channel on the same service. It’s the name that appears in the list and in the status readouts while you’re streaming.
* The switch beside **Enabled** arms the destination — only armed destinations go on air. The same switch appears on the row in the list, so you can arm and disarm without opening each one.

### Resolution and bitrate are shared

Below a divider in the editor is **Resolution & bitrate**, and under it a reminder of how it works:

*"Shared by every destination — your program is encoded once and the same video is sent to all of them."*

Captivate encodes your program once. Changing the format in one destination’s editor changes it for all of them — when you have more than one destination, Captivate says so before applying the change, in a **Shared Setting** prompt you can silence with **Don’t show this again**.

The first entry in the list matches your project’s own format and is the right choice most of the time. Pick a lower one when your uplink can’t sustain the project format.

**💡 TIP**\
Your upload bandwidth needs to cover the bitrate **once**, not once per destination — the same encoded stream is copied to each. What multiplies is the outbound traffic your connection has to carry, so a marginal uplink still struggles with several destinations.

## What each destination’s status means

Under each name in the list, Captivate tells you what will happen when you go live:

| Status                    | Meaning                                                                                                                                                                            |
| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **On air when you start** | Armed and complete. This one goes live when you start streaming.                                                                                                                   |
| **Needs setup**           | Something required is missing or invalid — most often an empty stream key. Captivate shows this even when the destination is switched off, because it’s the thing you have to fix. |
| **Off**                   | Set up correctly, but switched off. It stays off when you go live. Use this to keep a destination configured between shows without streaming to it.                                |

## Go live

The footer of the dialog tells you what’s about to happen, for example **Going live to 2 destinations**. The **Start Streaming** button stays disabled until at least one destination is armed and complete; when it isn’t, the footer says why:

* *"No destination is switched on."* — you have destinations, but none armed. Turn one on.
* *"The destination you switched on still needs setting up."* — armed, but a required field is missing. Select it and finish it.

Once you’re streaming, the top-bar button reads **Stop Streaming**. Click it to end the broadcast.

{% hint style="info" %}
None of this blocks you in **Settings** > **Streaming…**. You can save a half-finished destination and come back to it — the readiness rules only apply when you’re going on air.
{% endhint %}

### A destination the service will refuse

Some services cap the bitrate they accept. If an armed destination’s cap is below the format you’ve chosen, the footer shows a warning in place of the going-live count: *"Twitch accepts up to 6000 Kbps — this format may be refused."* It names the strictest armed destination, since that’s the one setting the ceiling.

This is a warning, not a block; Captivate will still let you stream. Either lower the format or switch that destination off.

## While you’re streaming

The status bar along the bottom of the window gains a readout for each destination — its name, then how it’s doing:

| Reads                          | Meaning                                                                                                                 |
| ------------------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| A bitrate, such as `4500 Kbps` | Connected and sending. The number is what’s actually going out, so it’s the quickest check that a destination is alive. |
| `Connecting...`                | Handshaking. Give it a moment.                                                                                          |
| `Reconnecting (1)`             | Dropped and trying again, with the attempt number.                                                                      |
| `Error`                        | Gave up. The others carry on.                                                                                           |
| `Idle`                         | Not currently sending.                                                                                                  |

The colors match — green, yellow, orange, red, grey. See [Per-destination streaming status](https://github.com/NewBlueFX/help-docs/tree/gitbook-test/gitbook/build-out-your-production/streaming-and-delivery/get-started/the-interface/top-bar-status-meaning.adoc#per-destination-streaming-status).

**Hover over a destination’s readout to see its server address**, and the error if it has one. That tooltip is where to look first when something goes wrong — it carries detail the one-word status can’t, such as *"YouTube rejected the stream key. Verify the key is correct and the stream is scheduled."*

The top bar keeps a one-line summary alongside the elapsed time. It reports the best state any destination is in: `Connected (2)` while two are sending, or `Error (1)` only once nothing is up. So compare that count against the number you armed — if it’s short, one of the readouts below will say why.

{% hint style="info" %}
The elapsed time counts from when you started streaming and keeps counting even if a destination drops. It tells you how long the session has run, not that it’s healthy — the per-destination readouts do that.
{% endhint %}

## When a destination drops

Captivate reconnects on its own. If a destination drops mid-stream it tries again up to **three times**, waiting **2 seconds**, then **4**, then **8**. If all three fail, that destination goes to **Error** and stays there — the others keep streaming, and Captivate never stops the broadcast because one destination failed.

Two details that explain behavior you might otherwise find puzzling:

* **A destination that fails immediately is retried more slowly.** When a connection breaks within about two seconds of being established — the signature of a stream key the service accepts and then rejects — Captivate waits **10 seconds** between attempts instead of ramping up from 2. Hammering a service that has just refused you tends to prolong the refusal.
* **The three attempts are per incident, not per show.** Once a destination has streamed cleanly for a few seconds, the counter resets. A flaky connection that drops and recovers repeatedly keeps recovering; it doesn’t exhaust a budget and stop trying.

To bring a destination in **Error** back, stop streaming, fix what the tooltip is telling you, and start again.

## Manage your destinations

Right-click a destination in the list for:

* **Duplicate Destination** — copy an existing one, for a second channel on the same service. The copy keeps the original’s settings, including its stream key, but always arrives **switched off** — change what needs changing, then arm it. That way two destinations can never start publishing to the same channel by accident.
* **Status** > **Enabled** / **Disabled** — the same thing as the switch.
* **Remove Destination** — confirms with *"Remove "\<name>"?"*.

Right-click an empty part of the list for **Add New Destination…** and **Remove All Destinations**. Removing all of them asks *"Remove all N destinations and their stream keys?"* and defaults to **No** — the keys go with the destinations, and you’ll have to fetch them again.

You can also remove a single destination with the bin button that appears on a row when you hover over it.

## Save destinations with this project

By default your destinations belong to **you on this computer** and are there whichever project you open — which is what you want when the same operator streams every show to the same channels.

Tick **Save destinations with this project** in the dialog footer to store them in the project file instead. The tickbox appears when you open the dialog from **Settings** > **Streaming…**, since it’s a setup decision rather than something to change on your way to air. When you open that project, its destinations are used in place of your usual ones, so a project you hand to a colleague arrives ready to stream where it’s meant to.

**⚠️ WARNING**\
This writes stream keys and SRT passphrases into the project file, which means anyone you send the project to can stream to your channels. Don’t share such a project publicly, and prefer leaving the box unticked for projects that circulate.

## Coming from an earlier release

If you streamed with an earlier version of Captivate, your settings come across automatically the first time you open the Streaming dialog or start a stream — the service you had configured becomes a destination in the list, already switched on. There’s nothing to re-enter and nothing to migrate by hand.

If the list looks empty when you were expecting your old settings, it’s because the destination was never fully configured; add it fresh.

## Where to find your stream URL and key

| Service          | Where to find it                   |
| ---------------- | ---------------------------------- |
| YouTube Live     | YouTube Studio                     |
| Twitch           | Your Twitch dashboard              |
| Facebook Live    | Facebook Live Producer             |
| X (Twitter)      | X Media Studio                     |
| LinkedIn Live    | LinkedIn Live                      |
| Switchboard Live | Your Switchboard dashboard         |
| Custom RTMP      | Whatever your RTMP server provides |

These pages move from time to time. The link in each destination’s editor always goes to the current one.

## Automate it

Everything in this dialog is also available through Captivate’s API, for control surfaces and automation systems that need to change destinations without an operator: list and inspect destinations, add, edit, enable, disable, duplicate, remove, and validate them.

Two things to know when you automate: stream keys and passphrases can be **set** but never read back, and changes take effect at the **next** stream start — editing a destination doesn’t reconfigure a broadcast already in progress.

## Troubleshooting

| Symptom                                                  | Likely cause                                                                                                                                                                                |
| -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Start Streaming** is greyed out in the dialog          | Nothing is armed and ready. The footer says which of the two it is.                                                                                                                         |
| A destination shows **Error** almost immediately         | Wrong server URL or stream key. Hover it for the detail — services often name the problem.                                                                                                  |
| It connects, then errors a few seconds later             | The service accepted the connection and then rejected the key. Generate a new key, and check you’re using the right account and that the event is scheduled where the service requires one. |
| *"Streaming Failure"* when you press **Start Streaming** | Captivate couldn’t start the broadcast at all — most often because nothing is configured, or the encoder couldn’t be created. The message names the reason.                                 |
| One destination fails, the rest are fine                 | A problem with that destination only. Its tooltip has the detail; the broadcast continues without it.                                                                                       |
| Every destination breaks up at once                      | Your uplink can’t carry the format you chose. Lower the resolution and bitrate, or reduce the number of destinations.                                                                       |

## See also

* [Stream to multiple destinations](/set-up-your-production/chapter-index-6/streaming-to-multiple-destinations.md)
* [Stream with SRT](/set-up-your-production/chapter-index-6/streaming-with-srt.md)
* [Feature availability by edition](/reference/entitlements-sku-matrix.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://captivatehelp.newbluelive.com/set-up-your-production/chapter-index-6/set-up-streaming.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
