RTMP (Real Time Messaging Protocol) ist ein Hochleistungsprotokoll für die Übertragung von Daten, Audio und Video über das Internet zwischen Flash-basierten Plattformtechnologien. Ursprünglich von Macromedia entwickelt und jetzt im Besitz von Adobe.
Nginx RTMP ist ein Nginx-basierter Medienstreamer mit RTMP-, HLS- und MPEG-DASH-Live-Streaming. Das Nginx RTMP-Modul verfügt über viele Funktionen, einschließlich H264/AAC-Unterstützung, HTTP-Callback-Unterstützung, HTTP-Steuermodul zum Aufzeichnen von Audio/Video usw.
In diesem Tutorial zeige ich Ihnen, wie Sie den Nginx-Webserver mit dem RTMP-Modul installieren und konfigurieren. Wir werden den neuesten CentOS 7-Server verwenden, und dieser Leitfaden umfasst die Konfiguration von nginx und rtmp-Modulen sowie die Erstellung von RTMP-Livestreams und Video-on-Demand.
Voraussetzungen
- CentOS 7-Server
- Root-Rechte
Was werden wir tun?
- Abhängigkeiten installieren
- Nginx mit zusätzlichem Paket und RTMP-Modul herunterladen
- Nginx kompilieren und von der Quelle installieren
- Nginx als Dienst konfigurieren
- Nginx RTMP-Modul konfigurieren
- Ersten RTMP-Livestream einrichten
- Testen
Schritt 1 - Abhängigkeiten installieren
In diesem Tutorial erstellen wir den Nginx-Webserver aus der Quelle. Wir müssen alle erforderlichen Paketabhängigkeiten installieren, einschließlich Entwicklungstools, EPEL-Repository und anderer Pakete.
Installieren Sie CentOS 'Development Tools'.
sudo yum -y groupinstall 'Development Tools'
Fügen Sie das EPEL-Repository hinzu.
sudo yum -y install epel-release
Nginx-Abhängigkeiten installieren.
sudo yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel pcre-devel GeoIP GeoIP-devel
Warten Sie, bis alle Pakete installiert sind.
Schritt 2 – Laden Sie Nginx mit zusätzlichem Paket und RTMP-Modul herunter
In diesem Schritt laden wir den Nginx-Quellcode mit den zusätzlichen Abhängigkeiten einschließlich pcre, zlib und OpenSSL herunter.
Wechseln Sie in das Verzeichnis „/usr/local/src“.
cd /usr/local/src
Laden Sie Nginx 1.14.0 herunter und extrahieren Sie es.
wget https://nginx.org/download/nginx-1.14.0.tar.gz
tar -xzvf nginx-1.14.0.tar.gz
Laden Sie das pcre-Paket herunter und extrahieren Sie es.
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.zip
unzip pcre-8.42.zip
Laden Sie das zlib-Paket herunter und extrahieren Sie es.
wget https://www.zlib.net/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz
Laden Sie das OpenSSL-Paket herunter und extrahieren Sie es.
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
tar -xzvf openssl-1.1.0h.tar.gz
Klonen Sie als Nächstes den Quellcode des Nginx RTMP-Moduls mit dem Befehl git.
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
Und entfernen Sie alle komprimierten tar.gz- und .zip-Dateien.
rm -f *.tar.gz *.zip
Nachfolgend sind die uns vorliegenden Verzeichnisdetails aufgeführt.
ls -lah
Und wir sind bereit zum Kompilieren und Installieren.
Schritt 3 – Nginx kompilieren und von der Quelle installieren
Wechseln Sie in das Verzeichnis „nginx-1.14.0“.
cd nginx-1.14.0/
Konfigurieren Sie nginx 1.14.0 mit den folgenden Parametern.
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=CentOS \
--builddir=nginx-1.14.0 \
--with-select_module \
--with-poll_module \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--with-mail=dynamic \
--with-mail_ssl_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre=../pcre-8.42 \
--with-pcre-jit \
--with-zlib=../zlib-1.2.11 \
--with-openssl=../openssl-1.1.0h \
--with-openssl-opt=no-nextprotoneg \
--add-module=../nginx-rtmp-module \
--with-debug
Kompilieren und installieren Sie Nginx mit dem RTMP-Modul, indem Sie die folgenden Befehle ausführen.
sudo make
sudo make install
Wenn die Installation abgeschlossen ist, müssen wir ein neues Symlink-Modulverzeichnis erstellen, einen neuen Nginx-Benutzer und eine neue Gruppe erstellen und ein neues Nginx-Cache-Verzeichnis erstellen.
Erstellen Sie ein Nginx-Symlink-Modul im Konfigurationsverzeichnis ‚/etc/nginx‘.
sudo ln -s /usr/lib64/nginx/modules /etc/nginx/modules
Erstellen Sie einen neuen „nginx“-Systembenutzer und eine neue Gruppe.
sudo useradd -r -d /var/cache/nginx/ -s /sbin/nologin -U nginx
Erstellen Sie nun ein neues Nginx-Cache-Verzeichnis ‚/var/cache/nginx‘ und ändern Sie den Eigentümer des Verzeichnisses in ‚nginx‘ Benutzer und Gruppe.
mkdir -p /var/cache/nginx/
chown -R nginx:nginx /var/cache/nginx/
Testen Sie die nginx-Konfiguration und die installierte nginx-Version.
nginx -t
nginx -V
Und das Folgende ist das Ergebnis.
Der Nginx-Webserver wurde auf CentOS 7 mit aktiviertem RTMP-Modul installiert.
Schritt 4 – Nginx as a Service konfigurieren
In diesem Tutorial führen wir nginx als Dienst aus und müssen eine neue nginx-Dienstdatei im systemd-Dienstverzeichnis erstellen.
Gehen Sie in das Verzeichnis ‚/lib/systemd/system‘ und erstellen Sie eine neue ‚nginx.service‘-Datei mit vim.
cd /lib/systemd/system/
vim nginx.service
Fügen Sie die Konfiguration unten ein.
[Unit] Description=nginx - high performance web server Documentation=https://nginx.org/en/docs/ After=network-online.target remote-fs.target nss-lookup.target Wants=network-online.target [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s TERM $MAINPID [Install] WantedBy=multi-user.target
Speichern und beenden.
Laden Sie nun das systemd-System neu.
systemctl daemon-reload
Starten Sie den nginx-Dienst und aktivieren Sie ihn so, dass er jedes Mal beim Systemstart gestartet wird.
systemctl start nginx
systemctl enable nginx
Der Nginx-Webserver läuft als Dienst auf dem CentOS 7-System.
Schritt 5 – Nginx RTMP-Modul konfigurieren
In diesem Schritt erstellen wir eine neue benutzerdefinierte Nginx-Konfiguration für das RTMP-Modul.
Gehen Sie in das Konfigurationsverzeichnis ‚/etc/nginx‘ und sichern Sie die ursprüngliche ‚nginx.conf‘-Datei.
cd /etc/nginx/
mv nginx.conf nginx.conf.asli
Erstellen Sie nun eine benutzerdefinierte Konfiguration 'nginx.conf'.
vim nginx.conf
Fügen Sie die Nginx RTMP-Konfiguration unten ein.
worker_processes auto; events { worker_connections 1024; } # RTMP configuration rtmp { server { listen 1935; # Listen on standard RTMP port chunk_size 4000; # Define the Application application show { live on; # Turn on HLS hls on; hls_path /mnt/hls/; hls_fragment 3; hls_playlist_length 60; # disable consuming the stream from nginx as rtmp deny play all; } } } http { sendfile off; tcp_nopush on; aio on; directio 512; default_type application/octet-stream; server { listen 8080; location / { # Disable cache add_header 'Cache-Control' 'no-cache'; # CORS setup add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Expose-Headers' 'Content-Length'; # allow CORS preflight requests if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Max-Age' 1728000; add_header 'Content-Type' 'text/plain charset=UTF-8'; add_header 'Content-Length' 0; return 204; } types { application/dash+xml mpd; application/vnd.apple.mpegurl m3u8; video/mp2t ts; } root /mnt/; } } }
Speichern und beenden.
Als nächstes müssen wir ein neues Verzeichnis für die HLS-Konfiguration erstellen und wir haben definiert, dass sich das Web-Root-Verzeichnis im Verzeichnis „/mnt“ befindet.
Erstellen Sie das Verzeichnis „hls“ unter dem Verzeichnis „/mnt“ und ändern Sie den Eigentümer des Verzeichnisses in den Benutzer und die Gruppe „nginx“.
mkdir -p /mnt/hls
chown -R nginx:nginx /mnt/hls
Testen Sie die Konfiguration und starten Sie den nginx-Dienst neu.
nginx -t
systemctl restart nginx
Schritt 6 – Richten Sie den ersten RTMP-Livestream ein
In diesem Tutorial erstellen wir unter Verwendung der mp4-Videos auf dem Server ein neues RTMP-Stream-Video auf Abruf und erstellen einen neuen Live-RTMP-Stream, der mithilfe der OBS-Software vom lokalen Computer übertragen wird.
Gehen Sie in das Konfigurationsverzeichnis „/etc/nginx“ und bearbeiten Sie die Datei „nginx.conf“.
cd /etc/nginx/
vim nginx.conf
Fügen Sie die Konfigurationen unten in die 'rtmp { ... }'-Klammer ein.
# RTMP video on demand for mp4 files application vod { play /mnt/mp4s; } # RTMP stream using OBS application stream { live on; }
Speichern und beenden.
Erstellen Sie nun ein neues Verzeichnis „mp4s“ zum Speichern aller Vod-Videos und ändern Sie den Besitzer in die nginx-Benutzergruppe.
mkdir -p /mnt/mp4s
chown -R nginx:nginx /mnt/mp4s
Testen Sie die nginx-Konfiguration und stellen Sie sicher, dass kein Fehler vorliegt, und starten Sie dann den nginx-Dienst neu.
nginx -t
systemctl restart nginx
Die Nginx-Konfiguration für den RTMP-Livestream und den Vod-Stream wurde abgeschlossen.
Schritt 7 – Testen
Testen Sie den RTMP-Livestream und den Vod-Stream mit dem VLC-Player.
Video-on-Demand-Stream
Öffnen Sie die VLC-App auf Ihrem Computer.
Klicken Sie auf das Menü „Datei“ und wählen Sie die Option „Netzwerk öffnen“.
Geben Sie nun die RTMP-URL für unseren Vod-Stream ein.
rtmp://192.168.1.10:1935/vod/file.mp4
Klicken Sie auf die Schaltfläche „Öffnen“.
Und das Folgende sind die Ergebnisse des Videostreams.
Livestream mit OBS (Open Broadcaster Software)
In diesem Tutorial testen wir den RTMP-Livestream mit der obs-Software und dem vlc-Player.
Wir werden nur das Terminalfenster mit der Open Broadcaster-Software streamen und versuchen, den RTMP-Livestream mit dem VLC-Player anzusehen.
Nachfolgend meine Konfiguration für die obs-Software.
Öffnen Sie die VLC-App auf Ihrem Computer.
Klicken Sie auf das Menü „Datei“ und wählen Sie die Option „Netzwerk öffnen“.
Geben Sie nun die RTMP-URL für unseren Live-Stream ein.
rtmp://192.168.1.10:1935/stream/
Klicken Sie auf die Schaltfläche „Öffnen“.
Und das Folgende ist das Ergebnis des Live-Streams mit Open Broadcaster über das nginx rtmp-Modul.
Die Installation des Nginx-Webservers mit RTMP-Modul auf CentOS 7 wurde erfolgreich abgeschlossen.