Skip to main content
By the end of this quickstart you’ll have a Livepeer Gateway and Orchestrator running on one machine, transcoded a test stream end-to-end, and verified an HLS playlist with three renditions (240p, 360p, 720p). The path uses -network offchain mode, which exercises the full job lifecycle without any on-chain dependencies. Once this works, you understand the network-direct video path; on-chain production setup uses the same architecture with payment envelopes attached. Personas 2 and 4 both start here. Persona 2 (video platform builders) takes this forward into VOD, webhooks, and player integration. Persona 4 (live-video-first builders) tunes for sub-three-second latency. Operators running Gateways in production should follow the in the Gateways tab.

Required Tools

Three things on one Linux amd64 machine:
  • go-livepeer binary or Docker
  • ffmpeg for the test stream
  • Three free terminals
No Arbitrum wallet, no API keys, no GPU.
Download the latest go-livepeer release for Linux amd64:
Install ffmpeg:
The -gateway flag replaces the older -broadcaster flag. If you see -broadcaster in community guides, substitute -gateway. The old flag still works in some builds and is deprecated.

Orchestrator Setup

1

Run go-livepeer in orchestrator mode

First terminal:
2

Confirm it's listening

Expected log lines:
Leave this terminal running.
-orchestrator and -transcoder together run in one process. In production these are typically split: Orchestrator on a small VPS handling routing and payments, transcoder on a GPU machine. Tutorial 3 in the Gateways tab covers the split.

Gateway Setup

1

Run go-livepeer in gateway mode

Second terminal:
2

Confirm it's listening

Expected log lines:
-orchAddr accepts a comma-separated list. Off-chain mode requires an explicit list because there’s no on-chain registry. On-chain mode removes this flag; the registry supplies Orchestrators automatically.

Stream Publishing

Third terminal. Pick one option below.
No source file needed; ffmpeg generates one:
The stream key (test_stream) is arbitrary in off-chain mode. The Gateway accepts any key. Expected ffmpeg output:

Output Verification

1

Pull the HLS playlist

Expected response:
Three renditions confirm the Orchestrator successfully transcoded the source. 240p, 360p, and 720p are the default profile.
2

Play it (optional)

Or paste the URL into VLC, OBS, or any HLS-capable player.
3

Watch the gateway logs

The Gateway terminal shows the job flow:
Every two-second chunk goes to the Orchestrator, comes back transcoded, and joins the HLS playlist.

Job Lifecycle

The full job lifecycle ran. The only piece off-chain mode skips is the payment envelope; segment routing, transcoding, and delivery are identical to a production Gateway. Four ideas underpin the completed run. Session. The Gateway creates a session per stream key. The session persists until the publisher disconnects or the Gateway shuts down. Segment. A two-second chunk of video. The Gateway sends segments to the Orchestrator independently and in order. Off-chain routing. Without -network offchain, the Gateway needs an Arbitrum RPC and a funded PM deposit. Off-chain mode keeps the routing logic intact and leaves the payment envelope empty. Transcoding profiles. The Orchestrator applied the default 240p, 360p, and 720p at 30fps. Customise via transcodingOptions.json passed to the Gateway.

Common Errors

Start the Orchestrator before the Gateway. Confirm the Listening for jobs log line in terminal 1, then start the Gateway in terminal 2.
The Gateway’s RTMP server isn’t running, or the port is wrong. Confirm the Gateway terminal shows RTMP Server listening on rtmp://127.0.0.1:1935. If -rtmpAddr was changed, update the ffmpeg command to match.
Wait three to five seconds after ffmpeg starts. The Gateway only creates the playlist once it has received and forwarded at least one segment. If it persists, check the stream key matches between ffmpeg and curl.
The Gateway received the stream and the Orchestrator failed to transcode. Check the Orchestrator terminal for errors. Common cause: libx264 missing from the go-livepeer build. Switch to the Docker path.
Check what’s holding the port:
Kill the conflicting process, or change -rtmpAddr, -httpAddr, and -serviceAddr to free ports.

Next Steps

Ingest and Playback

RTMP, WHIP, and WebRTC ingest; HLS, LL-HLS, and DASH playback.

Codec Support

H.264, H.265, AV1, transcoding profiles, custom transcodingOptions.json.

VOD and Recording

Stream recording, archive playback, asset management.

Low-Latency Live Streaming

Sub-3s glass-to-glass with WebRTC ingest and LL-HLS.
For production Gateway operation, including on-chain mode and GPU transcoding, follow the .
Last modified on May 31, 2026