Skip to main content
The Livepeer Gateway was previously called the Livepeer Broadcaster. Some CLI flags and log output still reference the Broadcaster name.

Prerequisites

Docker Engine 20.10 or later is required. If Docker is not installed or needs updating, follow the official Docker Engine installation guide for your platform.
Gateway nodes do not require NVIDIA GPU drivers as a baseline prerequisite. NVIDIA drivers apply to orchestrator or other GPU compute workloads.
Windows hosts should run Docker with WSL2 for best compatibility: Docker Desktop WSL2 backend.
Verify your installed version:
docker --version

Pull the Livepeer Docker Image

Fetch the latest from Docker Hub:
docker pull livepeer/go-livepeer:master

Configure the Gateway

Create a working directory and a docker-compose.yml file. Choose the configuration that matches your deployment target:
On-chain mode connects the gateway to the Livepeer network on Arbitrum. An Ethereum wallet and Arbitrum One RPC endpoint are required before starting. See [On-Chain Setup Requirements](/v2/gateways/run-a-gateway/requirements/on-chain setup/on-chain) for prerequisites.
docker-compose.yml
services:
  gateway:
    image: livepeer/go-livepeer:master
    container_name: "gateway"
    restart: unless-stopped
    ports:
      - 1935:1935   # RTMP ingest
      - 8935:8935   # HTTP API / HLS output
      - 5935:5935   # CLI
    volumes:
      - ./data/gateway:/root/.lpData
    command:
      - "-gateway"
      - "-network=arbitrum-one-mainnet"
      - "-ethUrl=<YOUR_ARB_RPC_URL>"
      - "-ethKeystorePath=/root/.lpData/keystore"
      - "-ethPassword=/root/.lpData/eth-secret.txt"
      - "-rtmpAddr=0.0.0.0:1935"
      - "-httpAddr=0.0.0.0:8935"
      - "-cliAddr=0.0.0.0:5935"
      - "-httpIngest=true"
      - "-blockPollingInterval=10"
      - "-transcodingOptions=P240p30fps16x9,P360p30fps16x9"
      - "-monitor"
      - "-v=6"
Replace <YOUR_ARB_RPC_URL> with your Arbitrum One RPC endpoint (e.g. from Alchemy or Infura).After creating this file, complete the Create Livepeer Gateway ETH Account step below before starting the gateway.

Create Livepeer Gateway ETH Account

This section applies to the On-Chain configuration only. Skip this step if using development (off-chain) mode.
Before the gateway can sign transactions on-chain, it needs an Ethereum account. Run the gateway interactively once to generate one:

Start the Gateway

Start the gateway container in the background:
docker compose up -d
Verify the gateway is running:
docker logs gateway
The gateway is ready when logs show it binding to the configured ports and connecting to orchestrators on the network.
On-chain mode only: The gateway must be funded with ETH before orchestrators will accept transcoding jobs. If streams produce no output, check that your gateway account has sufficient ETH. See [Fund your gateway](/v2/gateways/run-a-gateway/requirements/on-chain setup/fund-gateway).

Stream Live Video

The gateway accepts RTMP ingest on port 1935. Transcoded HLS output is available on port 8935 at /stream/<manifest-id>.m3u8.
Push a file or live source to the gateway using FFmpeg:
ffmpeg -re -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://localhost:1935/live/stream
Replace input.mp4 with a local file or a live source URL. The path segment after /live/ (stream in the example above) becomes the manifest ID used to retrieve the HLS output.The transcoded HLS output will be available at:
http://localhost:8935/stream/stream.m3u8
If running on a cloud server, ensure ports 1935 (RTMP ingest) and 8935 (HLS output) are open in your firewall or security group rules.

Stream Authentication

By default, the gateway accepts any incoming RTMP stream. To restrict access, use the -authWebhookUrl flag to point the gateway at an authentication endpoint you control. When an incoming stream arrives, the gateway sends a POST request to the webhook URL with the stream URL as a JSON payload:
{
  "url": "rtmp://localhost:1935/live/stream"
}
Your server responds with HTTP 200 to allow the stream, or any other status code to reject it. Add the flag to your docker-compose.yml command block:
- "-authWebhookUrl=https://your-auth-server.com/auth"
The stream key in the RTMP path (e.g. stream in rtmp://localhost/live/stream) is included in the webhook payload URL. Your webhook implementation can use this value to authenticate incoming callers - for example, by checking it against a list of valid stream keys. For full webhook response options including custom manifestID, streamKey override, and per-stream transcoding profiles, see the RTMP Webhook Authentication reference.

Next Step: Configure the Gateway

View all available configuration options for the gateway
Last modified on March 9, 2026