Skip to main content
A stream in Livepeer Studio is a livestream object you create via the API. It has a unique stream ID, a stream key (for ingest), and a playback ID (for viewers). Livepeer manages the stream lifecycle (create, update, delete) and notifies your app of state changes via webhooks.

Sessions

A stream is made up of one or more sessions—periods when the stream is active. Only one session is active at a time. Sessions have their own IDs and metadata. Use the sessions API to list sessions for a stream.

Recording

If recording is enabled, the session can be stored as an asset when the stream ends. Webhooks such as recording.started, recording.ready, and recording.waiting notify your backend of recording state. The resulting recording is an asset you can play back like any VOD asset.

Ingest

You can send live video into a stream with:
  • RTMP — Default; use with OBS or other RTMP encoders. See Stream via OBS.
  • WebRTC — Low-latency ingest from the browser. See Livestream from browser.
  • SRT — Also supported for ingest.
When a stream is live, stream health provides metrics (e.g. transcoding status, ingest rate) so you can monitor quality and troubleshoot.

Multistream

You can send the same stream to multiple RTMP/RTMPS destinations (e.g. Twitch, YouTube, Facebook Live) using multistream. Targets are configured per stream in the dashboard or via the API. Webhooks (multistream.connected, multistream.error, multistream.disconnected) report target status.

Playback

Viewers use the playback ID to watch the stream. The Livepeer Player prefers WebRTC for low latency (about 0.5–3 seconds) and falls back to HLS when needed (e.g. if the stream has B-frames). Playback URLs can also be obtained from the Playback Info API.
B-frames (bidirectional frames) can break WebRTC playback and cause fallback to HLS. With OBS, use the Livepeer Studio preset or set keyframe interval to 1 and turn off B-frames. See Stream via OBS.

Webhooks

Common stream-related events:
  • stream.started — Stream is active and the HLS URL is available.
  • stream.idle — Stream is no longer active.
  • recording.* — Recording started, ready, or waiting.
  • multistream.* — Multistream target connected, error, or disconnected.
See Webhooks and Listen to events.

Guides

Last modified on February 18, 2026