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 usesDocumentation Index
Fetch the complete documentation index at: https://docs.livepeer.org/llms.txt
Use this file to discover all available pages before exploring further.
-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-livepeerbinary or Dockerffmpegfor the test stream- Three free terminals
- Binary
- Docker
Download the latest
go-livepeer release for Linux amd64: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
Run go-livepeer in orchestrator mode
First terminal:
| Flag | Effect |
|---|---|
-orchestrator | Accept jobs from gateways |
-transcoder | Attach a local transcoder; CPU transcoding via libx264 |
-network offchain | Local job routing, no Ethereum dependency |
-serviceAddr 127.0.0.1:8936 | gRPC address the gateway connects to |
-cliAddr 127.0.0.1:7936 | CLI management port |
-datadir ~/.lpData-orch | Data directory, kept separate from the gateway |
-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
Run go-livepeer in gateway mode
Second terminal:
| Flag | Effect |
|---|---|
-gateway | Accept RTMP streams from publishers |
-network offchain | Matches the orchestrator |
-orchAddr 127.0.0.1:8936 | Point at the local orchestrator |
-rtmpAddr 127.0.0.1:1935 | RTMP ingest port |
-httpAddr 127.0.0.1:8935 | HTTP port the HLS playlist is pulled from |
-cliAddr 127.0.0.1:5935 | CLI management port |
-datadir ~/.lpData-gw | Data directory, separate from orchestrator |
-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.- Test pattern
- Sample file
No source file needed;
ffmpeg generates one:test_stream) is arbitrary in off-chain mode. The gateway accepts any key.
Expected ffmpeg output:
Output Verification
Pull the HLS playlist
Job Lifecycle
-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
No orchestrators found or connection refused on 8936
No orchestrators found or connection refused on 8936
Start the orchestrator before the gateway. Confirm the
Listening for jobs log line in terminal 1, then start the gateway in terminal 2.ffmpeg exits with Connection refused
ffmpeg exits with Connection refused
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.HLS playlist returns 404
HLS playlist returns 404
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.Playlist exists but has zero segments
Playlist exists but has zero segments
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.Port conflict: address already in use
Port conflict: address already in use
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.