RTMP ist ein von Macromedia entwickeltes Echtzeit-Messaging-Protokoll, das zum Streamen von Audio, Video und Daten über das Internet verwendet werden kann. Nginx RTMP ist ein Nginx-basierter Medienstreamer, der mit vielen Funktionen ausgestattet ist, darunter H264/AAC-Unterstützung, Online-Transcodierung mit FFmpeg, HTTP-Callback-Unterstützung und ein HTTP-Steuermodul zum Aufzeichnen von Audio/Video.
In diesem Tutorial zeigen wir Ihnen, wie Sie Nginx mit dem RTMP-Modul kompilieren und einen RTMP-Livestream unter CentOS 8 erstellen.
Voraussetzungen
- Ein frischer CentOS 8 VPS auf der Atlantic.Net Cloud Platform
- Ein auf Ihrem Server konfiguriertes Root-Passwort
Schritt 1 – Erstellen Sie einen Atlantic.Net Cloud-Server
Melden Sie sich zunächst bei Ihrem Atlantic.Net Cloud Server an. Erstellen Sie einen neuen Server und wählen Sie CentOS 8 als Betriebssystem mit mindestens 2 GB RAM. Stellen Sie über SSH eine Verbindung zu Ihrem Cloud-Server her und melden Sie sich mit den oben auf der Seite hervorgehobenen Anmeldeinformationen an.
Sobald Sie sich bei Ihrem CentOS 8-Server angemeldet haben, führen Sie den folgenden Befehl aus, um Ihr Basissystem mit den neuesten verfügbaren Paketen zu aktualisieren.
yum update -y
Schritt 2 – Erforderliche Abhängigkeiten installieren
Bevor Sie beginnen, müssen Sie die Abhängigkeiten installieren, die zum Kompilieren von Nginx mit RTMP-Unterstützung erforderlich sind. Installieren Sie zuerst das Development Tool-Gruppenpaket mit dem folgenden Befehl:
yum groupinstall 'Development Tools' -y
Installieren Sie als Nächstes das EPEL-Repository mit dem folgenden Befehl:
yum install epel-release -y
Installieren Sie nach der Installation andere erforderliche Abhängigkeiten mit dem folgenden Befehl:
yum install wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel pcre-devel GeoIP GeoIP-devel -y
Sobald alle Pakete installiert sind, können Sie mit dem Kompilieren von Nginx fortfahren.
Schritt 3 – Erforderliche Komponenten herunterladen
Zuerst müssen Sie die erforderlichen Komponenten herunterladen, um Nginx mit RTMP-Unterstützung zu kompilieren.
Laden Sie zunächst die neueste stabile Version von Nginx mit dem folgenden Befehl herunter:
wget http://nginx.org/download/nginx-1.18.0.tar.gz
Extrahieren Sie es nach dem Herunterladen mit dem folgenden Befehl:
tar -xvzf nginx-1.18.0.tar.gz
Laden Sie als Nächstes PCRE und Zlib mit dem folgenden Befehl herunter:
wget https://ftp.pcre.org/pub/pcre/pcre-8.42.zip wget https://www.zlib.net/zlib-1.2.11.tar.gz
Extrahieren Sie sie nach dem Herunterladen mit dem folgenden Befehl:
unzip pcre-8.42.zip tar -xvzf zlib-1.2.11.tar.gz
Sobald beide extrahiert sind, laden Sie OpenSSL mit dem folgenden Befehl herunter:
wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
Extrahieren Sie als Nächstes das heruntergeladene Paket mit dem folgenden Befehl:
tar -xzvf openssl-1.1.0h.tar.gz
Laden Sie als Nächstes die neueste Version des Nginx RTMP-Moduls aus dem Git-Repository mit dem folgenden Befehl herunter:
git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git
Sobald alle Komponenten heruntergeladen sind, können Sie mit dem nächsten Schritt fortfahren.
Schritt 4 – Nginx mit RTMP-Unterstützung installieren
Wechseln Sie zunächst mit dem folgenden Befehl in das Verzeichnis von Nginx:
cd nginx-1.18.0/
Als nächstes konfigurieren Sie Nginx mit RTMP-Unterstützung mit dem folgenden Befehl:
./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.18.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
Sobald der Konfigurationsprozess abgeschlossen ist, sollten Sie die folgende Ausgabe erhalten:
Configuration summary + using threads + using PCRE library: ../pcre-8.42 + using OpenSSL library: ../openssl-1.1.0h + using zlib library: ../zlib-1.2.11 nginx path prefix: "/etc/nginx" nginx binary file: "/usr/sbin/nginx" nginx modules path: "/usr/lib64/nginx/modules" nginx configuration prefix: "/etc/nginx" nginx configuration file: "/etc/nginx/nginx.conf" nginx pid file: "/var/run/nginx.pid" nginx error log file: "/var/log/nginx/error.log" nginx http access log file: "/var/log/nginx/access.log" nginx http client request body temporary files: "/var/cache/nginx/client_temp" nginx http proxy temporary files: "/var/cache/nginx/proxy_temp" nginx http fastcgi temporary files: "/var/cache/nginx/fastcgi_temp" nginx http uwsgi temporary files: "/var/cache/nginx/uwsgi_temp" nginx http scgi temporary files: "/var/cache/nginx/scgi_temp"
Als nächstes installieren Sie Nginx mit dem folgenden Befehl:
make make install
Überprüfen Sie nach der Installation von Nginx die installierte Version von Nginx mit dem folgenden Befehl:
nginx -V
Sie sollten die folgende Ausgabe erhalten:
nginx version: nginx/1.18.0 (CentOS) built by gcc 8.3.1 20191121 (Red Hat 8.3.1-5) (GCC) built with OpenSSL 1.1.0h 27 Mar 2018 TLS SNI support enabled configure arguments: --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
Schritt 5 – Erstellen Sie eine Systemd-Dienstdatei für Nginx
Als Nächstes müssen Sie eine Nginx-Dienstdatei erstellen, um den Nginx-Dienst zu verwalten. Sie können es mit dem folgenden Befehl erstellen:
nano /lib/systemd/system/nginx.service
Fügen Sie die folgenden Zeilen hinzu:
[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 schließen Sie die Datei, wenn Sie fertig sind, und laden Sie dann den systemd-Daemon mit dem folgenden Befehl neu:
systemctl daemon-reload
Starten Sie als Nächstes Nginx und aktivieren Sie es mit dem folgenden Befehl, um es beim Systemneustart zu starten:
systemctl start nginx systemctl enable nginx
Schritt 6 – Konfigurieren Sie Nginx für die Verwendung von RTMP
First, create a backup copy of the Nginx main configuration file with the following command: mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
Erstellen Sie als Nächstes eine neue Nginx-Konfigurationsdatei mit dem folgenden Befehl:
nano /etc/nginx/nginx.conf
Fügen Sie die folgenden Zeilen hinzu:
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 schließen Sie die Datei, erstellen Sie dann ein neues Verzeichnis für die HLS-Konfiguration und weisen Sie ihr den richtigen Besitz zu:
mkdir -p /mnt/hls chown -R nginx:nginx /mnt/hls
Speichern und schließen Sie die Datei, wenn Sie fertig sind.
Schritt 7 – RTMP-Livestream erstellen
Als Nächstes müssen Sie ein RTMP-Stream-Video erstellen und einen neuen Live-RTMP-Stream erstellen. Sie können dies tun, indem Sie die Hauptkonfigurationsdatei von Nginx bearbeiten:
nano /etc/nginx/nginx.conf
Suchen Sie die folgenden Zeilen:
hls_playlist_length 60; # disable consuming the stream from nginx as rtmp deny play all; }
Fügen Sie die folgenden Zeilen genau unter der obigen Zeile hinzu:
application vod { play /mnt/mp4s; } # RTMP stream using OBS application stream { live on; }
Speichern und schließen Sie die Datei und starten Sie dann den Nginx-Dienst mit dem folgenden Befehl neu:
systemctl restart nginx
Erstellen Sie als Nächstes ein Verzeichnis zum Speichern von MP4-Videos:
mkdir -p /mnt/mp4s
Laden Sie als Nächstes das Beispielvideo mit dem folgenden Befehl herunter:
cd /mnt/mp4s wget https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_480_1_5MG.mp4 -O myfile.mp4
Geben Sie als Nächstes dem /mnt/mp4s-Verzeichnis den richtigen Besitz:
chown -R nginx:nginx /mnt/mp4s
Schritt 8 – Installieren Sie FFmpeg und starten Sie den Streaming-Server
Zuerst müssen Sie FFmpeg auf Ihrem Server installieren. Standardmäßig ist es nicht im Standard-Repository von CentOS 8 installiert, daher müssen Sie das Powertool-Repository in Ihrem System aktivieren. Sie können es mit dem folgenden Befehl aktivieren:
yum install epel-release dnf-utils yum-config-manager --set-enabled PowerTools yum-config-manager --add-repo=https://negativo17.org/repos/epel-multimedia.repo
Als nächstes installieren Sie FFmpeg mit dem folgenden Befehl:
yum install ffmpeg -y
Sobald FFmpeg installiert ist, starten Sie den Streaming-Server mit dem folgenden Befehl:
ffmpeg -re -i /mnt/mp4s/myfile.mp4 -vcodec libx264 -vprofile baseline -g 30 -acodec aac -strict -2 - f flv rtmp://your-server-ip:1935/show/vod
Schritt 9 – RTMP-Streaming testen
Als Nächstes müssen Sie den RTMP-Vod-Stream mit dem VLC Media Player testen.
Sobald das Clientsystem geöffnet ist, öffnen Sie den VLS Media Player und gehen Sie zu VLC Media => Open Network Stream . Sie sollten den folgenden Bildschirm sehen:
Geben Sie die URL Ihres RTMP-Streaming-Servers an und klicken Sie auf Play Schaltfläche.
Sobald Sie erfolgreich verbunden sind, sollten Sie Ihr MP4-Video auf dem folgenden Bildschirm sehen:
Schlussfolgerung
Im obigen Tutorial haben Sie gelernt, wie Sie Nginx mit RTMP-Unterstützung installieren. Sie haben auch gelernt, wie Sie Nginx konfigurieren, um MP4-Videos zu streamen und mit dem VLC Media Player vom Remote-System abzuspielen. Versuchen Sie noch heute, Nginx mit RTMP-Unterstützung auf VPS-Hosting von Atlantic.Net zu installieren!
Erfahren Sie mehr über unsere VPS-Hosting-Services und Virtual Private Server.