CGJU
CGJU
8 juin 2026 · Temps de lecture 8 minutes

Présentation du module Nginx-RTMP

Nginx-RTMP est un module tiers open source pour Nginx, développé par le développeur russe Roman Arutyunyan. Il ajoute la prise en charge du protocole RTMP (Real-Time Messaging Protocol) à Nginx, transformant Nginx en un serveur de streaming puissant.

Le protocole RTMP a été initialement développé par Macromedia (rachetée ensuite par Adobe) pour la transmission audio-vidéo entre les lecteurs Flash et les serveurs. Bien que Flash ait disparu, le protocole RTMP reste la norme de facto pour la diffusion en direct en raison de sa faible latence et de sa stabilité éprouvée.

Fonctionnalités principales de Nginx-RTMP

  • Diffusion et lecture RTMP : prend en charge la diffusion et la lecture en direct via le protocole RTMP
  • Prise en charge HLS : convertit en temps réel les flux RTMP au format HLS
  • Prise en charge DASH : prend en charge le format de streaming MPEG-DASH
  • Enregistrement en direct : enregistre le contenu en direct sous forme de fichiers vidéo
  • Transcodage en temps réel : transcodage en temps réel en combinaison avec FFmpeg
  • Tableau de bord statistique : page de statistiques intégrée
  • Contrôle de diffusion : prend en charge les commandes de contrôle telles que l'enregistrement, l'arrêt et l'abandon

Scénarios d'application courants

  • Diffusion personnelle : créer sa propre plateforme de diffusion
  • Formation interne en entreprise : système de diffusion vidéo interne
  • Diffusion éducative : cours en ligne, enseignement à distance
  • Diffusion de jeux : diffusion en direct des images de jeu
  • Système de surveillance : relais de streaming de caméras

Installation par compilation sur Ubuntu

L'installation de Nginx-RTMP sur Ubuntu nécessite une compilation à partir des sources, car le module RTMP n'est pas un module officiel de Nginx. Voici les étapes détaillées d'installation par compilation.

Étape 1 : Installer les dépendances de compilation

Tout d'abord, installez les packages de dépendance nécessaires à la compilation :

sudo apt update
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y

Étape 2 : Télécharger le code source

Téléchargez le code source de Nginx et du module Nginx-RTMP :

cd /usr/local/src
sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz
sudo wget https://github.com/arut/nginx-rtmp-module/archive/refs/heads/master.zip -O nginx-rtmp-module.zip
sudo tar zxvf nginx-1.24.0.tar.gz
sudo unzip nginx-rtmp-module.zip

Étape 3 : Compiler et installer

Configurez les paramètres de compilation et ajoutez le module RTMP :

cd nginx-1.24.0
sudo ./configure \
  --prefix=/usr/local/nginx \
  --with-http_ssl_module \
  --add-module=../nginx-rtmp-module-master
sudo make
sudo make install

Étape 4 : Créer un service système

Créez un fichier de service systemd pour faciliter la gestion de Nginx :

sudo tee /etc/systemd/system/nginx.service << EOF
[Unit]
Description=NGINX with RTMP module
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable nginx
sudo systemctl start nginx

Installation sur Windows

Sur Windows, vous pouvez utiliser une version précompilée pour éviter les tracas de la compilation.

Méthode 1 : Utiliser une version précompilée

Vous pouvez télécharger une version Windows compilée par des contributeurs sur GitHub, ou utiliser la méthode suivante :

# 1. Téléchargez Nginx pour Windows
# depuis http://nginx.org/en/download.html

# 2. Téléchargez nginx-rtmp-module
# depuis https://github.com/arut/nginx-rtmp-module

# Remarque : La version Windows nécessite une compilation spécifique,
# il est recommandé de rechercher directement une version nginx-rtmp-win32 prête à l'emploi

Méthode 2 : Utiliser Docker

Utiliser Docker sur Windows est une méthode plus simple :

docker run -d \
  --name nginx-rtmp \
  -p 1935:1935 \
  -p 8080:8080 \
  -v /path/to/nginx.conf:/etc/nginx/nginx.conf \
  tiangolo/nginx-rtmp

Explication détaillée de la configuration

Le fichier de configuration de Nginx-RTMP est nginx.conf, généralement situé dans le répertoire /usr/local/nginx/conf/. Voici une explication détaillée de chaque paramètre.

Configuration de base

Voici la configuration RTMP la plus basique :

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
        }
    }
}
  • listen 1935 : port RTMP par défaut, le pare-feu doit être ouvert
  • chunk_size : taille des blocs de données, affecte l'efficacité de la transmission
  • application live : définit une application nommée live
  • live on : active le mode diffusion en direct
  • record off : désactive la fonction d'enregistrement

Configuration HLS

Configurez la sortie HLS pour permettre la lecture du flux en direct sur une page web :

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;

            hls on;
            hls_path /tmp/hls;
            hls_fragment 3;
            hls_playlist_length 15;
            hls_cleanup on;
            hls_sync 100ms;
        }
    }
}

http {
    server {
        listen 8080;

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
        }
    }
}
  • hls on : active la fonction HLS
  • hls_path : chemin de stockage des segments HLS et de la playlist
  • hls_fragment : durée de chaque segment (en secondes)
  • hls_playlist_length : durée totale de la playlist
  • hls_cleanup : nettoyage automatique des segments expirés
  • hls_sync : décalage de synchronisation audio-vidéo

Configuration DASH

Configurez la prise en charge MPEG-DASH :

application live {
    live on;
    record off;

    dash on;
    dash_path /tmp/dash;
    dash_fragment 2;
    dash_playlist_length 10;
    dash_format mp4;
}

Configuration de transcodage multi-débits

Implémentez le transcodage multi-débits en temps réel en combinaison avec FFmpeg :

application live {
    live on;
    record off;

    exec ffmpeg -i rtmp://localhost/live/$name
      -c:v libx264 -crf 23 -preset veryfast -maxrate 2000k -bufsize 4000k -s 1280x720 -c:a aac -b:a 128k -f flv rtmp://localhost/live720/$name
      -c:v libx264 -crf 23 -preset veryfast -maxrate 1000k -bufsize 2000k -s 854x480 -c:a aac -b:a 96k -f flv rtmp://localhost/live480/$name
      -c:v libx264 -crf 23 -preset veryfast -maxrate 500k -bufsize 1000k -s 640x360 -c:a aac -b:a 64k -f flv rtmp://localhost/live360/$name;
}

application live720 {
    live on;
    record off;
    hls on;
    hls_path /tmp/hls/720p;
}

application live480 {
    live on;
    record off;
    hls on;
    hls_path /tmp/hls/480p;
}

application live360 {
    live on;
    record off;
    hls on;
    hls_path /tmp/hls/360p;
}

Test de diffusion

Diffuser avec FFmpeg

La méthode de diffusion la plus simple consiste à utiliser FFmpeg :

# Diffuser un fichier local
ffmpeg -re -i test.mp4 -c copy -f flv rtmp://IP_DU_SERVEUR/live/stream1

# Diffuser l'écran
ffmpeg -f gdigrab -framerate 30 -i desktop -c:v libx264 -preset fast -pix_fmt yuv420p -f flv rtmp://IP_DU_SERVEUR/live/stream1

Diffuser avec OBS

OBS Studio est le logiciel de diffusion en direct le plus populaire. Voici comment le configurer :

  1. Ouvrez OBS, cliquez sur "Paramètres"
  2. Sélectionnez l'onglet "Diffusion"
  3. Pour le service, choisissez "Personnalisé..."
  4. Serveur : rtmp://IP_DU_SERVEUR/live
  5. Clé de diffusion : stream1 (peut être personnalisée)
  6. Cliquez sur OK, puis sur "Commencer la diffusion"

Test de lecture

Utilisez ffplay ou VLC pour lire le flux RTMP :

# Lecture FFplay
ffplay rtmp://IP_DU_SERVEUR/live/stream1

# Lecture VLC
vlc rtmp://IP_DU_SERVEUR/live/stream1

Si HLS est configuré, vous pouvez également le lire dans un navigateur :

http://IP_DU_SERVEUR:8080/hls/stream1.m3u8

Explication détaillée de la configuration HLS

HLS (HTTP Live Streaming) est un protocole de streaming développé par Apple. Grâce à sa base HTTP et sa bonne compatibilité, il est largement utilisé pour la diffusion en direct sur le web et la lecture sur mobile.

Optimisation des paramètres clés HLS

  • hls_fragment : durée des segments, recommandée 2-4 secondes, plus courte = moins de latence mais plus de fichiers
  • hls_playlist_length : longueur de la playlist, recommandée 5-6 fois la durée des segments
  • hls_sync : synchronisation audio-vidéo, 100ms est généralement suffisant
  • hls_start_number : numéro de départ de la playlist

Configuration HLS à faible latence

Si vous recherchez une latence plus faible, vous pouvez configurer ainsi :

hls on;
hls_path /tmp/hls;
hls_fragment 1;
hls_playlist_length 3;
hls_sync 50ms;
hls_cleanup on;
hls_delete_threshold 3;

Cette configuration permet de réduire la latence à environ 3-5 secondes, mais augmente la charge du serveur et la consommation réseau.

Fonction d'enregistrement

Nginx-RTMP offre une puissante fonction d'enregistrement en direct, permettant de sauvegarder le contenu diffusé sous forme de fichiers vidéo.

Options de configuration de l'enregistrement

application live {
    live on;

    record all;
    record_path /tmp/records;
    record_suffix -%Y%m%d-%H%M%S.flv;
    record_unique on;
    record_max_size 1000M;
    record_max_files 5;
    record_interval 30m;

    # Script exécuté après l'enregistrement
    exec_record_done ffmpeg -i $path -c copy /path/to/$basename.mp4;
}
  • record : mode d'enregistrement, off|all|audio|video
  • record_path : chemin de sauvegarde des fichiers enregistrés
  • record_suffix : suffixe de nom de fichier, prend en charge le format temporel
  • record_unique : génère un nom de fichier unique pour éviter l'écrasement
  • record_max_size : taille maximale d'un fichier enregistré
  • record_max_files : nombre maximum de fichiers conservés
  • record_interval : fréquence de création d'un nouveau fichier

Explication des modes d'enregistrement

  • off : désactive l'enregistrement
  • all : enregistre l'audio et la vidéo
  • audio : enregistre seulement l'audio
  • video : enregistre seulement la vidéo

Tableau de bord statistique

Nginx-RTMP intègre une fonction de statistiques, permettant de consulter l'état actuel du serveur et les informations de connexion via une page HTTP.

Configurer le tableau de bord statistique

http {
    server {
        listen 8080;

        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root /usr/local/src/nginx-rtmp-module-master/;
        }

        location /control {
            rtmp_control all;
        }
    }
}

Accéder au tableau de bord statistique

Après la configuration, accédez aux adresses suivantes :

  • Page de statistiques : http://IP_DU_SERVEUR:8080/stat
  • Interface de contrôle : http://IP_DU_SERVEUR:8080/control

Les informations affichées par le tableau de bord statistique incluent :

  • Nombre de flux actuellement actifs
  • Informations de diffusion pour chaque flux
  • Nombre de clients de lecture pour chaque flux
  • Bande passante de téléchargement et de téléversement
  • Informations détaillées telles que la durée de connexion

Interface de contrôle

L'interface de contrôle permet de contrôler la diffusion à distance :

  • record/start : démarrer l'enregistrement
  • record/stop : arrêter l'enregistrement
  • drop/publisher : déconnecter la diffusion
  • drop/subscriber : déconnecter un spectateur

Problèmes courants et optimisation

1. Configuration du pare-feu

Assurez-vous que le pare-feu ouvre les ports nécessaires :

# Pare-feu UFW
sudo ufw allow 1935/tcp
sudo ufw allow 8080/tcp

# iptables
sudo iptables -A INPUT -p tcp --dport 1935 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

2. Problèmes de permissions

Assurez-vous que Nginx dispose des droits d'écriture sur le répertoire des segments HLS :

sudo mkdir -p /tmp/hls /tmp/records
sudo chown -R www-data:www-data /tmp/hls /tmp/records

3. Optimisation des performances concurrentes

Ajustez la configuration Nginx pour améliorer la capacité de concurrence :

worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 65535;
    use epoll;
    multi_accept on;
}

4. Authentification de diffusion

Pour empêcher toute diffusion non autorisée, vous pouvez ajouter une authentification :

application live {
    live on;
    record off;

    # Authentification URL simple
    on_publish http://localhost/auth;
}

# Service de vérification HTTP (exemple)
location /auth {
    if ($arg_key = "your-secret-key") {
        return 200;
    }
    return 403;
}

Conclusion

Nginx-RTMP est un module de serveur de streaming open source puissant qui permet de configurer facilement son propre système de diffusion en direct. Cet article présente de manière complète l'utilisation de Nginx-RTMP, de la présentation du module à l'installation et au déploiement, en passant par la configuration détaillée et l'utilisation des fonctionnalités.

Que ce soit pour la diffusion personnelle, la formation interne en entreprise ou l'éducation en ligne, Nginx-RTMP peut fournir un service de streaming stable et fiable. Combiné à FFmpeg, il permet également de mettre en œuvre des fonctionnalités avancées telles que le transcodage en temps réel et la sortie multi-débits.

Après avoir configuré votre serveur de streaming, vous pouvez utiliser notre lecteur M3U8 en ligne pour tester l'effet de lecture du flux en direct HLS. Il vous suffit de saisir l'adresse HLS dans votre navigateur pour le lire.

Recommandations

Plus d'articles intéressants et d'outils pratiques

Vous voulez tester votre flux en direct ?

Utilisez notre lecteur M3U8 en ligne gratuit pour lire les flux en direct HLS directement dans votre navigateur

Essayer maintenant ➡