This repository publishes native packages for Debian, Ubuntu, Alpine, Fedora, Enterprise Linux, openSUSE, Arch Linux, Homebrew, and Windows.
Supported releases:
- Debian 12 (
bookworm) - Debian 13 (
trixie)
Supported architectures include amd64, arm64, armhf, i386, ppc64el,
riscv64, and s390x where the selected release provides an official
container image.
echo "deb [signed-by=/usr/share/keyrings/openrtmp.gpg] https://packages.openrtmp.org/debian bookworm main" \
| sudo tee /etc/apt/sources.list.d/openrtmp.listSupported releases:
- Ubuntu 22.04 LTS (
jammy) - Ubuntu 24.04 LTS (
noble) - Ubuntu 26.04 LTS (
resolute) - Ubuntu 26.10 (
stonking)
Supported architectures are amd64, arm64, armhf, ppc64el, riscv64,
and s390x.
echo "deb [signed-by=/usr/share/keyrings/openrtmp.gpg] https://packages.openrtmp.org/ubuntu noble main" \
| sudo tee /etc/apt/sources.list.d/openrtmp.listInstall the common APT signing key first:
curl -fsSL https://packages.openrtmp.org/openrtmp.gpg \
| sudo tee /usr/share/keyrings/openrtmp.gpg >/dev/null
sudo apt update
sudo apt install librtmp2 librtmp2-devSupported branches:
- Alpine 3.21 (
v3.21) - Alpine 3.22 (
v3.22) - Alpine 3.23 (
v3.23) - Alpine 3.24 (
v3.24) - Alpine Edge (
edge)
Supported architectures are x86_64, x86, aarch64, armv7, ppc64le,
riscv64, and s390x.
wget -O /etc/apk/keys/openrtmp-alpine.rsa.pub \
https://packages.openrtmp.org/openrtmp-alpine.rsa.pub
echo "https://packages.openrtmp.org/alpine/v3.24/main" \
>> /etc/apk/repositories
apk update
apk add librtmp2 librtmp2-devFedora 44 packages are built for x86_64, aarch64, ppc64le, and s390x.
Packages and repository metadata are signed with the OpenRTMP GPG key.
sudo tee /etc/yum.repos.d/openrtmp.repo >/dev/null <<'EOF'
[openrtmp]
name=OpenRTMP
baseurl=https://packages.openrtmp.org/rpm/fedora/44/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.openrtmp.org/openrtmp.asc
EOF
sudo dnf install librtmp2 librtmp2-develEnterprise Linux 9 and 10 packages are intended for RHEL-compatible systems
including RHEL, Rocky Linux, and AlmaLinux. Supported architectures are
x86_64, aarch64, ppc64le, and s390x.
sudo tee /etc/yum.repos.d/openrtmp.repo >/dev/null <<'EOF'
[openrtmp]
name=OpenRTMP
baseurl=https://packages.openrtmp.org/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.openrtmp.org/openrtmp.asc
EOF
sudo dnf install librtmp2 librtmp2-developenSUSE Leap 16.0 packages are built for x86_64, aarch64, ppc64le, and
s390x.
sudo rpm --import https://packages.openrtmp.org/openrtmp.asc
sudo zypper addrepo --refresh \
"https://packages.openrtmp.org/rpm/opensuse/16.0/$(uname -m)" openrtmp
sudo zypper refresh
sudo zypper install librtmp2 librtmp2-develThe Arch Linux repository targets the official x86_64 architecture. Packages
and repository databases are signed with the OpenRTMP GPG key.
curl -fsSL https://packages.openrtmp.org/openrtmp.asc -o /tmp/openrtmp.asc
key="$(gpg --show-keys --with-colons /tmp/openrtmp.asc | awk -F: '$1 == "fpr" { print $10; exit }')"
sudo pacman-key --add /tmp/openrtmp.asc
sudo pacman-key --lsign-key "$key"
sudo tee -a /etc/pacman.conf >/dev/null <<'EOF'
[openrtmp]
SigLevel = Required DatabaseRequired
Server = https://packages.openrtmp.org/arch/$arch
EOF
sudo pacman -Syu librtmp2The repository also acts as a Homebrew tap. Because the GitHub repository is
named packages rather than homebrew-packages, add it with its explicit
remote once:
brew tap openrtmp/packages https://github.com/OpenRTMP/packages
brew install openrtmp/packages/librtmp2Run the brew tap command with the explicit URL first. brew install openrtmp/packages/librtmp2 on its own will try to auto-tap using
Homebrew's default naming convention (homebrew-packages), which doesn't
exist and fails to clone.
Homebrew 6.0+ requires third-party taps to be trusted before their
formulae are loaded (Tap Trust), so
brew tap may print Invalid formula / untrusted tap warnings the
first time — this is expected. Installing the fully qualified formula
name (brew install openrtmp/packages/librtmp2) trusts just that
formula automatically. To trust the whole tap up front instead, run
brew trust openrtmp/packages.
The formula is updated automatically when a new librtmp2 release is published.
On macOS Sequoia, Tahoe, and Golden Gate (arm64) - plus Sequoia and Tahoe
on Intel, where GitHub still offers an Intel runner - brew install
fetches a precompiled bottle instead of building from source; other
platforms, including macOS Sonoma (whose GitHub Actions runner is
deprecated), build librtmp2 locally.
Signed Windows ZIPs are built for both x86_64 and arm64 for every
librtmp2 release with native Windows support (releases up to v0.11.0 do not
build on Windows and have no Windows packages). Each architecture is built,
tested (including RTMP and RTMPS loopback tests) and checked on a native
runner of that architecture before it is published.
Each ZIP contains bin\librtmp2.dll, the import library
lib\librtmp2.dll.lib, the static library lib\librtmp2.lib, the C header
include\librtmp2\librtmp2.h, README, the librtmp2 license, and the OpenSSL
license notice. OpenSSL is linked statically, so the DLL needs only Windows
system DLLs plus the Microsoft Visual C++ Redistributable (2015-2022) that
every Rust/MSVC DLL uses. Each archive has a SHA-256 checksum and an OpenPGP
signature.
The verification example below requires GnuPG (gpg) to be installed. The
trusted OpenRTMP package-signing key fingerprint is
615A20712AA690E917D6DCEF75E87340DA09771D.
PowerShell example:
$version = (Invoke-RestMethod https://api.github.com/repos/OpenRTMP/librtmp2/releases/latest).tag_name.TrimStart('v')
$arch = if ([System.Runtime.InteropServices.RuntimeInformation]::OSArchitecture -eq [System.Runtime.InteropServices.Architecture]::Arm64) { "arm64" } else { "x86_64" }
$base = "https://packages.openrtmp.org/windows/$arch/$version"
$file = "librtmp2-$version-windows-$arch.zip"
$keyFile = "openrtmp.asc"
$trustedFingerprint = "615A20712AA690E917D6DCEF75E87340DA09771D"
Invoke-WebRequest "$base/$file" -OutFile $file
Invoke-WebRequest "$base/$file.sha256" -OutFile "$file.sha256"
Invoke-WebRequest "$base/$file.asc" -OutFile "$file.asc"
Invoke-WebRequest "https://packages.openrtmp.org/openrtmp.asc" -OutFile $keyFile
$expectedHash = ((Get-Content "$file.sha256" -Raw).Trim() -split '\s+')[0].ToLowerInvariant()
$actualHash = (Get-FileHash -Algorithm SHA256 $file).Hash.ToLowerInvariant()
if ($actualHash -ne $expectedHash) {
throw "SHA-256 checksum verification failed."
}
$keyInfo = & gpg --batch --with-colons --show-keys $keyFile
$fingerprintLine = $keyInfo | Where-Object { $_ -like 'fpr:*' } | Select-Object -First 1
$fingerprint = ($fingerprintLine -split ':')[9]
if ($fingerprint -ne $trustedFingerprint) {
throw "OpenRTMP signing key fingerprint verification failed."
}
& gpg --batch --import $keyFile
if ($LASTEXITCODE -ne 0) { throw "Failed to import the OpenRTMP signing key." }
& gpg --batch --verify "$file.asc" $file
if ($LASTEXITCODE -ne 0) { throw "OpenPGP signature verification failed." }
Expand-Archive $file -DestinationPath .- APT:
librtmp2,librtmp2-dev - Alpine:
librtmp2,librtmp2-dev,librtmp2-static - RPM/DNF/Zypper:
librtmp2,librtmp2-devel - Arch Linux:
librtmp2 - Homebrew:
librtmp2 - Windows:
x86_64andarm64ZIPs (librtmp2 releases with native Windows support)