Skip to main content

LPMS (livepeer/lpms) is a Go library providing RTMP ingest, HLS output, and FFmpeg-backed transcoding. It is the core media handling layer inside go-livepeer’s broadcaster node and is available independently for Go applications that need media server functionality. LPMS can run as a standalone binary for testing or be imported as a library into a larger Go application.

Building LPMS

LPMS requires libavcodec (FFmpeg) and related libraries. The install_ffmpeg.sh script installs all dependencies to ~/compiled:
For NVIDIA GPU support, a Pascal or later GPU and the NVIDIA CUDA toolkit are required. The build system detects GPU capability automatically when CUDA is on the path.

Default Endpoints

The test LPMS server exposes: Run the test server:
Push a test stream with FFmpeg:
Play back from the HLS endpoint:

Embedding LPMS

Import LPMS and configure LPMSOpts:
See core/lpms.go for the full LPMSOpts fields including segment duration, manifest window size, and GOP configuration.

GPU Transcoding

LPMS exposes a GPU transcoding API using NVENC (encoding) and NVDEC (decoding) via FFmpeg’s hardware acceleration path. Select the processing mode and GPU device at runtime:
The cmd/transcoding/transcoding.go sample program demonstrates GPU selection via CLI flags and is the reference implementation for testing NVIDIA processing in an LPMS environment.
LPMS is the media layer embedded in go-livepeer. For the full Livepeer Protocol with Orchestrator discovery, Probabilistic Micropayments, and network routing, run go-livepeer in broadcaster mode instead of using LPMS directly.

Transcoding

Segment submission API and transcoding profile configuration for the broadcaster Gateway.

Video Overview

Comparison of LPMS, broadcaster Gateway, and managed SDK access paths.
Last modified on May 31, 2026