rtmp: Module RTMP de NGINX
Installation
Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :
- RedHat Enterprise Linux 7, 8, 9 et 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 et 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
Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :
load_module modules/ngx_rtmp_module.so;
Ce document décrit nginx-module-rtmp v1.2.2 publié le 5 juillet 2025.
nginx-rtmp-module
Blog du projet
http://nginx-rtmp.blogspot.com
Manuel Wiki
https://github.com/arut/nginx-rtmp-module/wiki/Directives
Groupe Google
https://groups.google.com/group/nginx-rtmp
https://groups.google.com/group/nginx-rtmp-ru (Russe)
Fonctionnalités
-
Streaming en direct RTMP/HLS/MPEG-DASH
-
Vidéo à la demande RTMP FLV/MP4, jouée depuis le système de fichiers local ou HTTP
-
Support de relais de flux pour le streaming distribué : modèles push & pull
-
Enregistrement de flux dans plusieurs FLVs
-
Support H264/AAC
-
Transcodage en ligne avec FFmpeg
-
Appels HTTP (publier/jouer/enregistrer/mettre à jour, etc.)
-
Exécution de programmes externes sur certains événements (exec)
-
Module de contrôle HTTP pour l'enregistrement audio/vidéo et le rejet des clients
-
Techniques de mise en mémoire tampon avancées pour maintenir les allocations de mémoire à un niveau minimum pour un streaming plus rapide et une faible empreinte mémoire
-
Prouvé pour fonctionner avec Wirecast, FMS, Wowza, JWPlayer, FlowPlayer, StrobeMediaPlayback, ffmpeg, avconv, rtmpdump, flvstreamer et bien d'autres
-
Statistiques en XML/XSL sous forme lisible par machine et par humain
-
Linux/FreeBSD/MacOS/Windows
Limitations de Windows
Le support de Windows est limité. Ces fonctionnalités ne sont pas prises en charge :
- execs
- pulls statiques
- auto_push
Format d'URL RTMP
rtmp://rtmp.example.com/app[/name]
app - doit correspondre à l'un des blocs application {} dans la configuration
name - interprété par chaque application peut être vide
Streaming en direct multi-travailleurs
Le module prend en charge le streaming en direct multi-travailleurs via le push automatique de flux vers les travailleurs nginx. Cette option est activée avec la directive rtmp_auto_push.
Exemple nginx.conf
rtmp {
server {
listen 1935;
chunk_size 4000;
# Mode TV : un éditeur, plusieurs abonnés
application mytv {
# activer le streaming en direct
live on;
# enregistrer les premiers 1K du flux
record all;
record_path /tmp/av;
record_max_size 1K;
# ajouter l'horodatage actuel à chaque flv
record_unique on;
# publier uniquement depuis localhost
allow publish 127.0.0.1;
deny publish all;
#allow play all;
}
# Transcodage (ffmpeg nécessaire)
application big {
live on;
# À chaque flux publié, exécutez cette commande (ffmpeg)
# avec substitutions : $app/${app}, $name/${name} pour le nom de l'application et du flux.
#
# Cet appel ffmpeg reçoit le flux de cette application &
# réduit la résolution à 32x32. Le flux est publié dans
# l'application 'small' (voir ci-dessous) sous le même nom.
#
# ffmpeg peut faire n'importe quoi avec le flux comme le
# transcodage vidéo/audio, le redimensionnement, la modification des paramètres de conteneur/codec, etc.
#
# Plusieurs lignes exec peuvent être spécifiées.
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;
# La vidéo avec une résolution réduite arrive ici depuis ffmpeg
}
application webcam {
live on;
# Flux depuis la webcam locale
exec_static ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an
-f flv rtmp://localhost:1935/webcam/mystream;
}
application mypush {
live on;
# Chaque flux publié ici
# est automatiquement poussé vers
# ces deux machines
push rtmp1.example.com;
push rtmp2.example.com:1934;
}
application mypull {
live on;
# Tirer tous les flux depuis la machine distante
# et jouer localement
pull rtmp://rtmp3.example.com pageUrl=www.example.com/index.html;
}
application mystaticpull {
live on;
# Le pull statique est démarré au démarrage de nginx
pull rtmp://rtmp4.example.com pageUrl=www.example.com/index.html name=mystream static;
}
# vidéo à la demande
application vod {
play /var/flvs;
}
application vod2 {
play /var/mp4s;
}
# Plusieurs éditeurs, plusieurs abonnés
# pas de vérifications, pas d'enregistrement
application videochat {
live on;
# Les notifications suivantes reçoivent toutes
# les variables de session ainsi que
# les arguments d'appel particuliers dans la requête HTTP POST
# Faire une requête HTTP & utiliser le code de retour HTTP
# pour décider s'il faut autoriser la publication
# depuis cette connexion ou non
on_publish http://localhost:8080/publish;
# Même chose pour jouer
on_play http://localhost:8080/play;
# Fin de publication/jouer (se répète lors de la déconnexion)
on_done http://localhost:8080/done;
# Toutes les notifications mentionnées ci-dessus reçoivent
# les arguments standard connect() ainsi que
# ceux de play/publish. Si des arguments sont envoyés
# avec une syntaxe de style GET pour jouer & publier
# ceux-ci sont également inclus.
# Exemple d'URL :
# rtmp://localhost/myapp/mystream?a=b&c=d
# enregistrer 10 images clés vidéo (pas de son) toutes les 2 minutes
record keyframes;
record_path /tmp/vc;
record_max_frames 10;
record_interval 2m;
# Notification asynchrone d'un flv enregistré
on_record_done http://localhost:8080/record_done;
}
# HLS
# Pour que HLS fonctionne, veuillez créer un répertoire dans tmpfs (/tmp/hls ici)
# pour les fragments. Le contenu du répertoire est servi via HTTP (voir
# section http{} dans la configuration)
#
# Le flux entrant doit être en H264/AAC. Pour les iPhones, utilisez le profil H264
# de base (voir l'exemple ffmpeg).
# Cet exemple crée un flux RTMP à partir d'un film prêt pour HLS :
#
# ffmpeg -loglevel verbose -re -i movie.avi -vcodec libx264
# -vprofile baseline -acodec libmp3lame -ar 44100 -ac 1
# -f flv rtmp://localhost:1935/hls/movie
#
# Si vous devez transcoder un flux en direct, utilisez la fonctionnalité 'exec'.
#
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
# MPEG-DASH est similaire à HLS
application dash {
live on;
dash on;
dash_path /tmp/dash;
}
}
}
# HTTP peut être utilisé pour accéder aux statistiques RTMP
http {
server {
listen 8080;
# Cette URL fournit des statistiques RTMP en XML
location /stat {
rtmp_stat all;
# Utilisez cette feuille de style pour afficher le XML sous forme de page web
# dans le navigateur
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
# Feuille de style XML pour afficher les statistiques RTMP.
# Copiez stat.xsl où vous le souhaitez
# et mettez le chemin complet du répertoire ici
root /path/to/stat.xsl/;
}
location /hls {
# Servir les fragments HLS
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
location /dash {
# Servir les fragments DASH
root /tmp;
add_header Cache-Control no-cache;
}
}
}
Exemple de streaming multi-travailleurs
rtmp_auto_push on;
rtmp {
server {
listen 1935;
application mytv {
live on;
}
}
}
GitHub
Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-rtmp.