rtmp: NGINX RTMP-Modul
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-rtmp
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-rtmp
Aktivieren Sie das Modul, indem Sie Folgendes am Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_rtmp_module.so;
Dieses Dokument beschreibt nginx-module-rtmp v1.2.2 veröffentlicht am 05. Juli 2025.
nginx-rtmp-module
Projektblog
http://nginx-rtmp.blogspot.com
Wiki-Handbuch
https://github.com/arut/nginx-rtmp-module/wiki/Directives
Google-Gruppe
https://groups.google.com/group/nginx-rtmp
https://groups.google.com/group/nginx-rtmp-ru (Russisch)
Funktionen
-
RTMP/HLS/MPEG-DASH Live-Streaming
-
RTMP Video on Demand FLV/MP4, Wiedergabe vom lokalen Dateisystem oder HTTP
-
Stream-Relay-Unterstützung für verteiltes Streaming: Push- & Pull-Modelle
-
Aufzeichnen von Streams in mehreren FLVs
-
H264/AAC Unterstützung
-
Online-Transkodierung mit FFmpeg
-
HTTP-Callbacks (veröffentlichen/wiedergaben/aufzeichnen/aktualisieren usw.)
-
Ausführen externer Programme bei bestimmten Ereignissen (exec)
-
HTTP-Steuermodul zum Aufzeichnen von Audio/Video und Trennen von Clients
-
Fortschrittliche Puffertechniken, um Speicherzuweisungen auf einem Minimum Niveau für schnelleres Streaming und geringen Speicherverbrauch zu halten
-
Bewährt mit Wirecast, FMS, Wowza, JWPlayer, FlowPlayer, StrobeMediaPlayback, ffmpeg, avconv, rtmpdump, flvstreamer und vielen mehr
-
Statistiken in XML/XSL in maschinen- & menschen- lesbarer Form
-
Linux/FreeBSD/MacOS/Windows
Einschränkungen unter Windows
Die Unterstützung für Windows ist eingeschränkt. Diese Funktionen werden nicht unterstützt:
- execs
- statische Pulls
- auto_push
RTMP-URL-Format
rtmp://rtmp.example.com/app[/name]
app - sollte mit einem der application {} Blöcke in der Konfiguration übereinstimmen
name - wird von jeder Anwendung interpretiert kann leer sein
Multi-Worker Live-Streaming
Das Modul unterstützt Multi-Worker Live-Streaming durch automatisches Stream-Pushing zu NGINX-Workern. Diese Option wird mit der Direktive rtmp_auto_push umgeschaltet.
Beispiel nginx.conf
rtmp {
server {
listen 1935;
chunk_size 4000;
# TV-Modus: ein Publisher, viele Abonnenten
application mytv {
# Live-Streaming aktivieren
live on;
# Die ersten 1K des Streams aufzeichnen
record all;
record_path /tmp/av;
record_max_size 1K;
# Aktuellen Zeitstempel zu jeder flv hinzufügen
record_unique on;
# Nur von localhost veröffentlichen
allow publish 127.0.0.1;
deny publish all;
#allow play all;
}
# Transkodierung (ffmpeg benötigt)
application big {
live on;
# Bei jedem veröffentlichten Stream diesen Befehl (ffmpeg) ausführen
# mit Ersetzungen: $app/${app}, $name/${name} für Anwendung & Streamnamen.
#
# Dieser ffmpeg-Aufruf erhält den Stream von dieser Anwendung &
# reduziert die Auflösung auf 32x32. Der Stream wird veröffentlicht an
# die 'small' Anwendung (siehe unten) unter demselben Namen.
#
# ffmpeg kann alles mit dem Stream machen, wie Video/Audiodaten
# transkodieren, die Größe ändern, Container-/Codec-Parameter ändern usw.
#
# Mehrere exec-Zeilen können angegeben werden.
exec ffmpeg -re -i rtmp://localhost:1935/$app/$name -vcodec flv -acodec copy -s 32x32
-f flv rtmp://localhost:1935/small/${name};
}
application small {
live on;
# Video mit reduzierter Auflösung kommt hier von ffmpeg
}
application webcam {
live on;
# Stream von der lokalen Webcam
exec_static ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an
-f flv rtmp://localhost:1935/webcam/mystream;
}
application mypush {
live on;
# Jeder hier veröffentlichte Stream
# wird automatisch an
# diese beiden Maschinen gepusht
push rtmp1.example.com;
push rtmp2.example.com:1934;
}
application mypull {
live on;
# Alle Streams von der entfernten Maschine ziehen
# und lokal abspielen
pull rtmp://rtmp3.example.com pageUrl=www.example.com/index.html;
}
application mystaticpull {
live on;
# Statischer Pull wird beim Start von NGINX gestartet
pull rtmp://rtmp4.example.com pageUrl=www.example.com/index.html name=mystream static;
}
# Video on Demand
application vod {
play /var/flvs;
}
application vod2 {
play /var/mp4s;
}
# Viele Publisher, viele Abonnenten
# keine Überprüfungen, keine Aufzeichnung
application videochat {
live on;
# Die folgenden Benachrichtigungen erhalten alle
# die Sitzungsvariablen sowie
# bestimmte Aufrufargumente in der HTTP POST
# Anfrage
# HTTP-Anfrage stellen & HTTP-Rückgabecode verwenden
# um zu entscheiden, ob das Veröffentlichen
# von dieser Verbindung erlaubt ist oder nicht
on_publish http://localhost:8080/publish;
# Gleiches beim Abspielen
on_play http://localhost:8080/play;
# Veröffentlichung/Wiedergabe beendet (wiederholt bei Trennung)
on_done http://localhost:8080/done;
# Alle oben genannten Benachrichtigungen erhalten
# die Standard-Connect()-Argumente sowie
# play/publish-Argumente. Wenn Argumente mit
# GET-ähnlicher Syntax zum Abspielen & Veröffentlichen gesendet werden,
# werden diese ebenfalls einbezogen.
# Beispiel-URL:
# rtmp://localhost/myapp/mystream?a=b&c=d
# 10 Video-Keyframes (kein Audio) alle 2 Minuten aufzeichnen
record keyframes;
record_path /tmp/vc;
record_max_frames 10;
record_interval 2m;
# Asynchrone Benachrichtigung über ein aufgezeichnetes flv
on_record_done http://localhost:8080/record_done;
}
# HLS
# Damit HLS funktioniert, erstellen Sie bitte ein Verzeichnis in tmpfs (/tmp/hls hier)
# für die Fragmente. Der Inhalt des Verzeichnisses wird über HTTP bereitgestellt (siehe
# http{}-Abschnitt in der Konfiguration)
#
# Der eingehende Stream muss in H264/AAC sein. Für iPhones verwenden Sie das Baseline H264
# Profil (siehe ffmpeg-Beispiel).
# Dieses Beispiel erstellt einen RTMP-Stream aus einem Film, der für HLS bereit ist:
#
# ffmpeg -loglevel verbose -re -i movie.avi -vcodec libx264
# -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
# -f flv rtmp://localhost:1935/hls/movie
#
# Wenn Sie einen Live-Stream transkodieren müssen, verwenden Sie die 'exec'-Funktion.
#
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
# MPEG-DASH ist ähnlich wie HLS
application dash {
live on;
dash on;
dash_path /tmp/dash;
}
}
}
# HTTP kann verwendet werden, um auf RTMP-Statistiken zuzugreifen
http {
server {
listen 8080;
# Diese URL bietet RTMP-Statistiken im XML-Format
location /stat {
rtmp_stat all;
# Verwenden Sie dieses Stylesheet, um XML als Webseite
# im Browser anzuzeigen
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
# XML-Stylesheet zur Anzeige von RTMP-Statistiken.
# Kopieren Sie stat.xsl, wo immer Sie möchten
# und geben Sie hier den vollständigen Verzeichnispfad an
root /path/to/stat.xsl/;
}
location /hls {
# HLS-Fragmenten bereitstellen
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
location /dash {
# DASH-Fragmenten bereitstellen
root /tmp;
add_header Cache-Control no-cache;
}
}
}
Multi-Worker Streaming Beispiel
rtmp_auto_push on;
rtmp {
server {
listen 1935;
application mytv {
live on;
}
}
}
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub Repository für nginx-module-rtmp.