Broadcasting
This page is for people who build broadcasting tools (encoders, multistream services, OBS plugins) and for anyone setting up a creator's stream. It covers where video goes, what settings to use, and how to tell when a channel is live.
How it works
- The creator's encoder sends video to Xive's ingest over RTMPS (or SRT), using a server URL and a stream key from Creator Studio.
- Xive transcodes it and serves it to viewers as adaptive HLS. It also records every broadcast for the channel's replays.
- The encoder is the on/off switch. When the encoder starts sending, the channel goes live. When it stops, the channel goes offline. Nothing needs to be clicked on the website.
Each creator has one permanent channel and one permanent stream key. The key only changes when the creator regenerates it, so an encoder is set up once.
Ingest
| Method | Address | Notes |
|---|---|---|
| RTMPS (recommended) | rtmps://ingest.xivecdn.com:443/live/ |
Use this with OBS, Streamlabs, vMix, hardware encoders and multistream services. Xive doesn't offer a plain (unencrypted) RTMP address. |
| SRT (optional) | srt://live.cloudflare.com:778 with a streamid and passphrase |
Copes better with packet loss (Wi-Fi, mobile hotspots). Caller mode only. It's the same stream as RTMPS, with the same recordings and replays. Use one or the other, not both at once. |
| The Xive app | Go Live in the iOS / Android app | Streams the phone's camera. A creator can't stream from the app and from an encoder at the same time; they have to end one first. |
| WHIP | Not offered | Xive doesn't accept WHIP for publishing. |
| In the browser | Not offered | The website has no camera or screen go-live. Use an encoder or the Xive app. |
Take the server URL from the creator, don't hard-code it. Creator Studio always shows the address that works for that creator. If your tool ships a Xive preset, let the creator edit the server and say where to find it.
Setting up an encoder
In OBS: Settings → Stream, Service Custom, then paste both values from Creator Studio:
Service: Custom Server: rtmps://ingest.xivecdn.com:443/live/ Stream Key: YOUR_STREAM_KEY
For SRT, Creator Studio gives a single SRT server URL that already contains the stream id and passphrase. Paste it as the Server and leave Stream Key empty:
Service: Custom Server: srt://live.cloudflare.com:778?streamid=YOUR_SRT_STREAM_ID&passphrase=YOUR_SRT_PASSPHRASE Stream Key: (empty)
Encoders that ask for the SRT values separately can use the server, stream id and passphrase from the Other encoders section underneath.
The stream key
- Where it is: Creator Studio → Settings → Stream (thexive.com/live-dashboard/settings/stream). The key and the SRT values are hidden until the creator presses Show, and each has a Copy button.
- It's permanent. The same key works for every broadcast until it's regenerated.
- Resetting it: Regenerate key on the same page. The old key stops working immediately, and every encoder or device still using it can no longer publish. The SRT passphrase changes at the same time. The key can't be regenerated while the channel is live.
- The API doesn't expose it. No scope or token gives an app the stream key. If your tool needs it, the creator pastes it in.
Anyone with the key can broadcast as the creator. Store it like a password: encrypted at rest, never logged, never in a URL, never sent to a browser page or an overlay. Show it masked by default, so it can't end up on stream. The SRT server URL and passphrase need the same care.
Treat the key as an opaque string. Some keys contain characters such as ? and =. Pass the key through exactly as the creator pasted it, without validating or re-encoding it.
Encoder settings
These presets are the ones Creator Studio shows under Stream Tools (live-dashboard/stream-tools). Bitrates are video bitrates.
| Preset | Resolution | FPS | Video bitrate | Keyframe | H.264 profile |
|---|---|---|---|---|---|
| 720p | 1280 × 720 | 30 | 2,500 kbps | 2 s | baseline |
| 720p 60fps | 1280 × 720 | 60 | 4,500 kbps | 2 s | baseline |
| 1080p | 1920 × 1080 | 30 | 6,000 kbps | 2 s | high |
| 1080p 60fps | 1920 × 1080 | 60 | 8,000 kbps | 2 s | high |
- Video: H.264 (x264, or NVENC H.264 on NVIDIA), CBR, keyframe interval 2 seconds. The keyframe interval sets the segment length viewers get, so 2 s keeps latency down.
- Not AMD hardware encoding. Video from AMD's hardware H.264 encoder (AMF) reaches viewers as a solid green picture on Xive, even when other platforms play it. Default your tool to x264 or NVENC and steer AMD users to x264. Creator guide: Set up your stream on Xive.
- Audio: Xive's bitrate guidance assumes a 160 kbps audio track. Recommendation (Xive doesn't specify these): AAC-LC, 48 kHz, stereo.
- Codec: Xive only lists H.264. Recommendation: don't send HEVC or AV1.
- Resolution: every channel goes up to 1080p, and that is the most Xive delivers to viewers, so sending more only costs you upload. 1080p60 is a Xive Pro feature, and Pro raises the bitrate ceiling so it fits. Viewers without Pro watch at up to 720p, whatever the source.
- Total bitrate: Stream Tools recommends staying at or under 6,500 kbps video + audio on a free channel and 9,000 kbps on Pro. That is 6,340 and 8,840 kbps of video with a 160 kbps audio track. It greys out presets above that. Viewers download roughly what you send, so a lower bitrate plays better on phones and slow connections.
- Minimum: Xive's video network needs at least 2 Mbps of video and audio combined (and at most 14 Mbps), so there is no preset below 720p at 2,500 kbps.
- Connection: Xive recommends 5 Mbps or more of upload for HD.
Multistreaming
Xive can rebroadcast a creator's stream to other platforms, so the encoder only has to send one stream to Xive.
- Where: Creator Studio → Rebroadcast (live-dashboard/rebroadcast).
- Destinations: up to 5, each an
rtmp://,rtmps://orsrt://server plus a stream key. The page has presets for Twitch, YouTube, Kick and Facebook. - Connect Twitch or Kick to have Xive fetch the stream key and add the destination for you. It's added turned off, and the creator turns it on. Connecting also keeps the stream title in sync on that platform.
- Destinations apply to every broadcast until the creator turns them off or removes them.
- On the free plan one destination can be on at a time; Xive Pro allows up to 5 at once. Every plan can save up to 5 and switch between them.
- Destination keys can only be written. Xive never shows one again, only its last 4 characters.
For multistream services: add Xive as a custom RTMPS destination using the creator's server URL and stream key. If the creator already uses your service, Xive's own rebroadcast isn't needed.
Latency and playback
- Viewers watch over HLS with adaptive bitrate, on the website and in the app. The top quality follows what the encoder sends.
- Expect HLS to run around 15 seconds or more behind the encoder. Chat, alerts and EventSub events arrive sooner than the video they relate to.
- Battles and Boxes sessions can also be played over WebRTC (WHEP) at about 1 second of latency when Xive turns it on. Viewers fall back to HLS automatically. Regular broadcasts are HLS only.
- Replays are recorded automatically. If the encoder drops and reconnects shortly afterwards, the broadcast continues as one stream with one replay. Who can watch a replay, and for how long, is the creator's and viewer's plan, not something your tool controls.
Detecting live and offline
Use EventSub. With the events:read scope on a channel, your app receives:
stream.online:id(the stream id),type: "live",started_at.stream.offline:stream_id.channel.updatewhen the title or category changes. Going live with a new title sends bothstream.onlineandchannel.update.
{
"metadata": {
"message_type": "notification",
"subscription_type": "stream.online",
…
},
"payload": {
"subscription": {
"type": "stream.online",
"condition": { "broadcaster_user_id": "3e0b8a51-2f4c-4f8e-9a6d-1b7c5e2d9f04" },
…
},
"event": {
"id": "c71d0f2a-8b3e-4a19-b5d6-0e4f9a2c7b18",
"type": "live",
"started_at": "2026-10-11T18:00:00Z",
…
}
}
}
stream.offlinecan arrive a few minutes after the encoder stops, because Xive waits in case the encoder reconnects. Don't treat a short silence from the encoder as the end of the broadcast.- Without EventSub, poll
GET /api/apps/streams/live, no more than once a minute. It lists every channel live right now. It needs no channel scope. - To set the title and category before or during a broadcast, use
PATCH /api/apps/channels/{channelId}/stream(channel:manage). - The API doesn't report encoder health (bitrate, dropped frames). Read those from the encoder itself.
The OBS plugin
Xive for OBS is Xive's own plugin for OBS Studio 32 or newer, on Windows, macOS (Apple Silicon) and Linux (Flatpak OBS). It:
- signs the creator in to Xive and writes the server URL and stream key into OBS's stream settings with one click;
- can regenerate the key, after asking the creator to confirm;
- pulls the credentials again each time OBS starts, so a key regenerated on the website reaches OBS before the creator goes live;
- adds docks for chat, activity, quick actions, gifts and the stream manager (title, category, go-live notification).
Installation is a single command per platform. It's on thexive.com/integrations/obs. If you build your own OBS integration, don't change the stream settings of a creator who is already set up with the plugin.
Checklist for tool makers
- Ask for the server URL and the stream key. Don't hard-code either.
- Default to RTMPS. Offer SRT as an option for poor connections.
- H.264, CBR, a 2-second keyframe interval, and a bitrate within the channel's limit.
- Keep the key secret and masked, and let the creator replace it after they regenerate it.
- Use
stream.online/stream.offlinefor status, and allow for a delay beforestream.offline. - Link creators to Creator Studio for their key and to Xive for OBS if they use OBS.