Need help? Chat now!

Hostwinds Tutorials

Suchergebnisse für:


Inhaltsverzeichnis


Was ist RTMP?
Installation
Abhängigkeiten installieren
Software herunterladen
Software kompilieren
Aufbau
Mehrere Anwendungen
Berechtigungen
Neucodierung
Zu anderen Diensten wechseln
HLS
HLS-Wiedergabe
SSL
Andere Konfigurationen
Streaming

Live-Streaming von einem VPS mit Nginx + RTMP

Stichworte: VPS 

Was ist RTMP?
Installation
Abhängigkeiten installieren
Software herunterladen
Software kompilieren
Aufbau
Mehrere Anwendungen
Berechtigungen
Neucodierung
Zu anderen Diensten wechseln
HLS
HLS-Wiedergabe
SSL
Andere Konfigurationen
Streaming

Egal, ob ein Server als Relais für Sie fungiert, damit Sie gleichzeitig auf mehrere Dienste streamen können, Ihren Videostream in verschiedenen Formaten, Auflösungen oder Bitraten neu kodieren oder von vorgezeichneten Videos, einer guten Methode Dazu ist mit einem Server, der Nginx ausführt, der mit der RTMP-Modul.

Live-Streaming verwendet viel Bandbreite. Die genaue Bandbreite verwendet auf der Anzahl der Streams sowie deren Bitrate.

Die Reduzierung der Bitrate der Videocodierung kann Ihre Bandbreitennutzung auf Kosten der Videoqualität verringern.

Was ist RTMP?

RTMP steht für Echtzeit-Messaging-Protokoll und ist eine übliche, standardisierte Methode, mit der viele Dienste (wie YouTube, Twitch usw.) Videos online senden oder zumindest anbieten.

Installation

In diesem Handbuch wird CentOS 7 als Betriebssystem des Servers verwendet.

NginX + RTMP kann auf anderen Linux-Distributionen konfiguriert werden und folgt den gleichen Anweisungen mit den anderen Verteiler-Paketmanager- und Standard-Dateipfaden.

Abhängigkeiten installieren

Aktualisieren Sie Ihr System

yum update -y

Installieren Sie die CentOS-Entwicklungstools

yum groupinstall -y 'Development Tools

Installieren Sie das EPEL-Repository

yum install -y epel-release

Abhängigkeiten installieren

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

Fügen Sie den GPG-Schlüssel ffmpeg hinzu und installieren Sie ffmpeg

rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install -y ffmpeg ffmpeg-devel

Software herunterladen

Erstellen oder wechseln Sie in ein Arbeitsverzeichnis

cd /usr/local/src/

Holen Sie sich die neueste Version von Nginx von Hier

wget https://nginx.org/download/nginx-1.17.0.tar.gz
tar -xzvf nginx-1.17.0.tar.gz

Klonen Sie das Nginx RTMP-Modul von Hier

git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

Entfernen Sie nicht benötigte TAR-Dateien

rm -f *.tar.gz

Software kompilieren

Wechseln Sie in Ihren heruntergeladenen Nginx-Ordner

cd nginx-1.17.0/

Führen Sie das Konfigurationsskript aus, um SSL und das RTMP-Modul hinzuzufügen
Aktualisieren Sie den Pfad des MODD-Moduldatei als notwendig, um darauf hinzuweisen, wo Sie das NginX-RTMP-Modul geklont haben

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module

Kompilieren Sie Nginx

make

Installieren Sie Nginx

make install

Starten und aktivieren Sie Nginx

systemctl start nginx
systemctl enable nginx

Aufbau

Um den RTMP-Dienst zu konfigurieren, müssen Sie Ihrer NGINX-Konfigurationsdatei einen RTMP-Bereich hinzufügen, der standardmäßig /etc/nginx/ginx.conf sein sollte.

Fügen Sie der conf-Datei einen RTMP-Abschnitt wie folgt hinzu:

rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4096;
    # Sample RTMP Application
    application live {
        live on;    # Enable listening for live streams to this application
        record off; # Do not record the stream
        meta copy;  # Copy the incoming metadata for the outgoing metadata
    }
}
}

In dieser Konfiguration haben wir dem Server mitgeteilt, dass er Anforderungen auf Port 1935 (den Standardport für RTMP) anhören und eine Anwendung mit dem Namen "Live" angeben, um unsere Streams anzunehmen.

Diese Konfiguration reicht aus, damit der Server einen Stream akzeptiert. Sie können jedoch weitere Konfigurationen für zusätzliche Funktionen festlegen.

Wenn Sie dann streamen, setzen Sie Ihr Ziel als RTMP: // server_address / Anwendung, wobei Server_Address die IP- oder Domänenadresse Ihres Servers ist, und die Anwendung ist der Name der Anwendung, die Sie in der NGINX-Konfiguration konfiguriert haben ("Live" in diesem Beispiel)).

Beispiel: rtmp: //127.0.0.1/live

Mehrere Anwendungen

Innerhalb des Servers {} können Sie so viele Anwendungen so konfigurieren, wie Sie möchten. Die einzige Einschränkung ist, dass jede Anwendung einen eindeutigen Namen haben muss.

Berechtigungen

Sie können Berechtigungen für das, was IPS an den Server streamen, angeben und welche IPS den Stream von diesem Server abspielen können.

Um eine Berechtigungsregel hinzuzufügen, fügen Sie in folgendem Format eine Zeile hinzu:

Mit "Erlauben" oder "DENY" gibt an, ob die Regel die Verbindung von der angegebenen Quelle ermöglicht oder verweigert.

Die Verwendung von "Publish" gibt an, dass der Quellort auf diesen Server streamen kann.Mit "Play" gibt an, dass der Quellort einen Stream von diesem Server wiedergeben kann.

Verwenden von "All", wenn der Standort als Catch-ALL für jede Adresse fungiert, die an diesen Server hergestellt ist.Andernfalls können Sie eine bestimmte IP-Adresse einstellen.

Die Berechtigungsregel in den SERVER {} -Blank lässt den Regling global über alle Anwendungen. Wenn Sie die Berechtigungsregel in eine Anwendung {} anlegen, gilt die Regel auf diese Anwendung.

Beispiele:

Erlauben Sie 127.0.0.1, auf diesen Server zu streamen, verweigern Sie jedoch alle anderen Quellen:

allow publish 127.0.0.1;
deny publish all;

Wiedergabe für alle Quellen außer 127.0.0.1 zulassen:

allow play all;
deny play 127.0.0.1;

Neucodierung

Sie können eine EXEC-Anweisung innerhalb eines Anwendungs-{} -S-Blocks verwenden, um einen Befehl auszuführen. Mit dieser Methode können Sie den empfangenen RTMP-Stream an einen Videoprozessor wie FFMPEG zum Codieren weitergeben.

Beispiel: Codieren Sie den empfangenen Stream in ein MP4-Format und speichern Sie ihn als Datei

exec ffmpeg -i rtmp://localhost/$app/$name -c copy -f mp4 /path/to/file/$name.mp4;

Zu anderen Diensten wechseln

Sie können den Stream von einer Anwendung auf einen anderen Empfänger drücken, indem Sie einfach die Push-Anweisung verwenden.

Sie können beispielsweise die folgende Anweisung an einen beliebigen Anwendungs-{} -Block hinzufügen, um den empfangenen Strom zu drücken, um mit einem ihrer Adressen aufnehmen (In diesem Fall die Seattle-Adresse). Ersetzen Sie einfach {strom_key} mit Ihrer Twitch-Stream-Taste.

push rtmp://live-sea.twitch.tv/app/{stream_key};

Sie können dasselbe für jede andere Plattform tun, die RTMP-Einnahmeadressen anbietet, auf die Sie streamen können, und können sogar mehrere Push-Anweisungen auflisten, um das Streaming auf mehrere Plattformen gleichzeitig zu ermöglichen.

HLS

HLS oder HTTP Live Streaming, ist ein ziemlich beliebtes Format, um das Video über die HTTP- und HTTPS-Protokolle zu streamen, wodurch der Stream den Bach in eine Webseite erheblich vereinfacht wird.

Um HLS zu aktivieren, fügen Sie einfach die folgenden Anweisungen zu einem Ihrer Anwendungsblöcke hinzu.

hls on;
hls_path /mnt/hls/$app;
hls_fragment 2s;
hls_playlist_length 4s;

Stellen Sie dann sicher, dass das Verzeichnis HLS_PATH-Verzeichnis existiert, indem Sie den Befehl ausführen:

mkdir -p /mnt/has/live

Sie können den Ordnerpfad, den Sie möchten, ändern / mnt / hls / $-App ändern.$ App wird durch den Namen der Anwendung (in diesem Fall "live") ersetzt.
Dies ist der Speicherort, an dem die HLS .m3u8-Dateien gespeichert werden.

Sie können auch die Werte HLS_Grage- und HLS_PlayList_Length-Werte an Ihre Bedürfnisse anpassen.
2S und 4S sind die Werte, die wir gefunden haben, um beim Streaming mit einem 2-Sekunden-Keyframe-Intervall am besten zu arbeiten.

Dann müssen Sie auch einen HTTP {} -Block Ihrer NGINX-Konfiguration hinzufügen. Dieser Block sollte ein oberster Ebene-Block auf derselben Ebene wie der vorhandene RTMP {} -Block sein. Dieser neue Block sollte wie folgt sein:

HTTP {
# Disable server tokens
server_tokens off;
# Include MIME types
include mime.types;

# Set timeout limit
keepalive\_timeout 65;

server {
    listen 80;      # HTTP IPv4
    listen \[::\]:80; # HTTP IPv6
    server\_name example.com www.example.com # Your domain (RECOMMENDED BUT OPTIONAL)

    location / {
        # Disable cache
        add\_header Cache-Control no-cache;

        # Enable CORS
        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;
        }

        # Specify file type to be served (.m3u8)
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t;
        }

        # File location
        # Set to the same hls\_path specified in the rtmp application
        root /mnt/hls;
    }
}
}

Sie können die Ports ändern, die im Hörer auf Anweisungen an einen beliebigen Anschluss an einen beliebigen Anschluss angezeigt werden, von dem Sie das Video bedienen möchten. Wenn Sie den Port von den Standard-HTTP / S-Anschlüssen (80 und 443) ändern, müssen Sie den Port nach der Serveradresse im folgenden Format angeben: http: // {server_address}: {Port}.

Beispiel: http://example.com:8080/

Speichern Sie danach diese Änderungen in der Nginx-Konfigurationsdatei, nginx, indem Sie den Befehl ausführen:

systemctl restart nginx

HLS-Wiedergabe

Wenn HLS aktiviert ist, können Sie den Stream jetzt mit jedem Videoplayer, der die HLS-Wiedergabe unterstützt, in Ihre Webseiten einbetten, z Video.JS oder PlayerJS.

Sie geben Ihrem Player die Quelladresse im folgenden Format an:

HTTP://{server_address}/{app_name}/{secret_key}.m3u8

{server_address} ist Ihre IP- oder Domäne Ihres Servers. {app_name} ist der Name der Anwendung {} Block, auf die Sie streamen, und {secret_key} ist der geheime Schlüssel, den Sie in Ihrer Streaming-Software (z. B. Obs ).

Beispiel:

http://example.com/live/secret_key.m3u8

SSL

Sie können auch HLS über HTTPS bedienen. Dazu müssen Sie ein SSL-Zertifikat und einen privaten Schlüssel innerhalb des Servers des Servers {} mit den folgenden Aussagen bereitstellen:

ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/privkey.pem;

Das Zertifikat muss für die in der Server_Name-Anweisung angegebene Domäne sein.

Sie müssen dann auch die Anweisungen hören / fügen, um den Anschluss auf Port 443 (den HTTPS-Anschluss) anzuhören und optional die Verwendung von SSL zu zwingen. Die Listen-Anweisungen dafür sollten wie folgt sein:

listen 80 SSL; # HTTP IPv4; force SSL
listen [::]:80 SSL; # HTTP IPv6; force SSL
listen 443 SSL; # HTTPS IPv4; force SSL
listen [::]:443 SSL; # HTTPS IPv6; force SSL

Wenn Sie kein SSL-Zertifikat für Ihre Domain haben, können Sie verwenden Lassen Sie uns ein kostenloses Zertifikat verschlüsseln.

Andere Konfigurationen

Es gibt viele andere Konfigurationsanweisungen, die Sie hinzufügen können, um die Funktionalität des RTMP-Moduls der Nginx-Konfiguration zu erweitern.

Die vollständige Dokumentation für das, was Sie hinzufügen und konfigurieren können, finden Sie Hier.

Streaming

Nachdem Sie Ihren Server konfiguriert haben, können Sie von jeder Video-Streaming-Software streamen, die Streaming an eine RTMP-Adresse unterstützt.Sie können in Betracht ziehen OBS So sehr leistungsstark ist der Plugin-Support mit einer großen Gemeinschaft beliebt und ist offen.

Um auf Ihren Server zu streamen, müssen Sie nur das Stream-Ziel als Adresse Ihres Servers mit dem Anwendungsnamen festlegen und einen privaten Schlüssel einstellen.Das Format für die Serveradresse sollte wie folgt sein:

RTMP://{server_address}/{app_name}

{server_address} ist Ihre IP- oder eine Domäne, die Sie auf diesen Server hinweisen.{app_name} ist der Name des Anwendungs-{} -S-Blocks, den Sie in der NGINX-Konfiguration festgelegt haben.Nach unserer Beispielkonfiguration von oben wäre dieser Anwendungsname "live".

Die Bereitstellung eines einzigartigen geheimen Schlüssels stellt sicher, dass der Stream eindeutig ist, auch wenn andere Quellen auf dieselbe Anwendung streamen.

Nach dem obigen Beispiel wird der Stream auf RTMP: //example.com/Live/secret_key live, das Sie mit einem beliebigen Videospiel abholen können, das einen RTMP-Stream eröffnen kann, z. B. VLC.

Geschrieben von Hostwinds Team  /  Juni 18, 2019