This is Tutorial 1 of 3. It covers the off-chain video transcoding path - the fastest way to understand the Gateway-Orchestrator relationship before adding AI workloads or going on-chain.
- Tutorial 2:
- Tutorial 3:
Architecture
-network offchain means no Arbitrum RPC, no PM deposits, no staking - a fully local simulation.
Prerequisites
go-livepeer binary (Linux amd64):Download go-livepeer
Install ffmpeg
Verify
Steps
What Happened
The full job lifecycle exercised in this tutorial:- Session - the Gateway creates a session per stream key. The session persists until the publisher disconnects or the Gateway shuts down.
- Segment - each ~2-second chunk of video. The Gateway sends segments to the Orchestrator independently and in order.
- Off-chain job routing - without
-network offchain, the Gateway would require an Arbitrum RPC and a funded PM deposit. In off-chain mode the routing is identical but the payment envelope is empty. - Transcoding profiles - the Orchestrator applied the default profiles: 240p30fps, 360p30fps, 720p30fps. Customise these via
transcodingOptions.jsonpassed to the Gateway.
Troubleshooting
'No orchestrators found' or connection refused on 8936
'No orchestrators found' or connection refused on 8936
The Orchestrator must be running before the Gateway starts. Start Step 1 first, confirm the
Listening for jobs log line, then start Step 2.ffmpeg exits with 'Connection refused'
ffmpeg exits with 'Connection refused'
The Gateway RTMP server is not running, or the wrong port is specified. Check that 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
Check the stream key is consistent between ffmpeg and curl. If
test_stream was used in ffmpeg, the playlist is at /stream/test_stream.m3u8. Also check that ffmpeg is still running - the Gateway only creates the playlist once it has received and forwarded at least one segment.Playlist exists but has zero segments
Playlist exists but has zero segments
The Gateway received the stream but the Orchestrator failed to transcode. Check the Orchestrator terminal for errors. Common cause: libx264 not available in the go-livepeer build. Try the Docker path instead.
Port conflict: address already in use
Port conflict: address already in use
Check Ports
-rtmpAddr, -httpAddr, and -serviceAddr flags.Related Pages
Tutorial 2: BYOC CPU
Attach a custom Docker container as an AI processor. No GPU required.
Tutorial 3: Go Production
On-chain registration, GPU pipelines, and the public Orchestrator network.
Transcoding Profiles
Customise the default 240p/360p/720p output profiles via transcodingOptions.json.
Payments Guide
Choose the right payment path before going on-chain.