Ich war begeistert, als F5 vor einem Jahr den Kauf von NGINX bekannt gab, denn als langjähriger F5-Mitarbeiter wusste ich, dass NGINX perfekt passen würde. Dieses Gefühl wurde bestätigt, als die Mitarbeiter von NGINX bei einem unserer ersten gemeinsamen Meetings etwas besprachen, das mir sehr wichtig war: ihr Engagement für die „Community“. Seit ich dem NGINX-Team als Produktmanager beigetreten bin, hatte ich das Vergnügen, dieses Engagement in Aktion zu sehen und intensiver mit der Community zusammenzuarbeiten.
Diejenigen von uns, die mit Open Source arbeiten, verwenden den Begriff „Community“ normalerweise, um Personen zu beschreiben, die ein Open-Source-Projekt durch das Einreichen von Code unterstützen. Obwohl sie wichtig sind, stellen sie nur einen kleinen Teil der NGINX-Community dar. Wer sind dann die anderen Mitglieder der Gemeinschaft? Wir schätzen auch diejenigen unter Ihnen, die:
In den letzten Monaten sind die Mitglieder der NGINX-Community wirklich zusammengekommen, um sich gegenseitig und die vielen Organisationen zu unterstützen, die während der COVID-19-Pandemie darum kämpfen, ihren Betrieb aufrechtzuerhalten. Viele von Ihnen haben Websites markiert, die von der NGINX-Software profitieren könnten, oder sogar Zeit und Fachwissen zur Verfügung gestellt, um NGINX für optimale Leistung zu optimieren. Um unseren Teil beizutragen, haben wir kostenlose Ressourcen für von COVID-19 betroffene Websites veröffentlicht und waren begeistert, wie sich die Community um neue NGINX-Benutzer versammelt hat.
Im Rahmen unserer Bemühungen, Organisationen dabei zu helfen, mit dem erhöhten Datenverkehr umzugehen und neue Funktionen hinzuzufügen, haben wir Organisationen an der Front der Pandemie bis zu fünf kostenlose Instanzen von NGINX Plus zur Verfügung gestellt. Dazu gehörten medizinische Dienstleister, Behörden und – was für diesen Blog am relevantesten ist – Schulen, Universitäten und gemeinnützige Organisationen mit Bildungsschwerpunkt. Wir haben bei diesen Organisationen einen Trendanwendungsfall entdeckt, der Sie wahrscheinlich nicht überraschen wird: Streaming-Video !
Da Schulen auf der ganzen Welt ihre Türen schließen und schnell auf Fernunterricht umstellen, erwarten wir, dass die Nutzung von Streaming-Videos in den kommenden Wochen und Monaten exponentiell zunehmen wird. Im Rest dieses Blogs erkläre ich, wie Sie mit NGINX Open Source und NGINX Plus stabiles, sicheres und skalierbares Video-Streaming ermöglichen.
Ein großes Dankeschön geht an den NGINX Technical Solutions Architect James Jones für die Aufnahme von Demovideos als Ergänzung zu diesem Blog!
Unsere Lösung für Video-Streaming nutzt das Real-Time Messaging Protocol (RTMP)-Modul für NGINX. In diesem Video erklärt James den Vorgang Schritt für Schritt:
Damit Sie sich beim Ansehen der Demo von James keine Notizen machen müssen, haben wir alle Befehle und Konfigurationen in den folgenden Abschnitten zusammengefasst.
Die in diesem Blog vorgestellten NGINX-Konfigurationen enthalten keine Sicherheitsmaßnahmen, um einzuschränken, wer Ihren Videostream ansehen kann. Es gibt verschiedene Möglichkeiten, Ihre Streams mit der Front-End-Anwendung zu sichern, die Ihre Zuschauer zum Ansehen des Videos verwenden. Sie können beispielsweise den Zugriff nur von bestimmten IP-Adressen aus zulassen oder eine Authentifizierung der Zuschauer verlangen.
Bevor Sie NGINX kompilieren, müssen Sie einige grundlegende Build-Tools installiert haben: autoconf
, gcc
, git
und make
. Um sie herunterzuladen und zu installieren, führen Sie den Befehl für Ihr Betriebssystem aus (wenn er hier nicht enthalten ist, lesen Sie die Dokumentation des Betriebssystemanbieters).
Für Debian und Ubuntu:
$ sudo apt update $ sudo apt installiere Build-Essential git
Für CentOS, Oracle Linux und RHEL:
$ sudo yum update $ sudo yum groupinstall "Entwicklungstools" $ sudo yum install git
Der NGINX-Build erfordert außerdem mehrere Abhängigkeiten: Perl-kompatible reguläre Ausdrücke (PCRE), OpenSSL und zlib zur Komprimierung.
Der einfachere Weg zum Herunterladen und Installieren der Abhängigkeiten ist die Verwendung eines Paketmanagers. Führen Sie den Befehl für Ihr Betriebssystem aus (wenn er hier nicht enthalten ist, lesen Sie die Dokumentation des Betriebssystemanbieters).
Für Debian und Ubuntu:
$ sudo apt installiere libpcre3-dev libssl-dev zlib1g-dev
Für CentOS, Oracle Linux und RHEL:
$ sudo yum groupinstall pcre-devel zlib-devel openssl-devel
Wenn Sie die Abhängigkeiten stattdessen aus der Quelle erstellen und installieren möchten, lesen Sie unsere Anweisungen .
Um den Build abzuschließen, klonen Sie die GitHub-Repositorys für RTMP und NGINX, führen den NGINX- Konfigurationsbefehl
aus und kompilieren dann NGINX.
$ cd /Pfad/zum/Build-Verzeichnis $ git clone https://github.com/arut/nginx-rtmp-module.git $ git clone https://github.com/nginx/nginx.git $ cd nginx $ ./auto/configure --add-module=../nginx-rtmp-module $ make $ sudo make install
Sie können NGINX so konfigurieren, dass Videos mit einem oder beiden der Protokolle „HTTP Live Streaming“ (HLS) und „Dynamic Adaptive Streaming over HTTP“ (DASH) gestreamt werden. Die Protokolle bieten dieselbe Funktionalität, die Wahl zwischen ihnen ist also wirklich eine Frage der Präferenz. Wenn Sie damit nicht vertraut sind, lesen Sie HLS vs. DASH im Vidbeo-Blog.
Für HLS ist die Konfiguration wie folgt. In der Demo (beim Zeitpunkt 5:10) erklärt James den Zweck dieser Anweisungen.
rtmp { server {
listen 1935;
application live {
live on;
interleave on;
hls on;
hls_path /tmp/hls;
hls_fragment 15s;
}
}
}
http {
default_type application/octet-stream;
server {
listen 80;
location /tv {
root /tmp/hls;
}
}
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
text/html html;
}
}
Für DASH ist die Konfiguration wie folgt. In der Demo kombiniert James HLS und DASH in einer einzigen Konfiguration, da viele Anweisungen für beide Protokolle gleich sind.
rtmp { server {
listen 1935;
application live {
live on;
dash on;
dash_path /tmp/dash;
dash_fragment 15s;
}
}
}
http {
server {
listen 80;
location /tv {
root /tmp/dash;
}
}
types {
text/html html;
application/dash+xml mpd;
}
}
Es ist immer eine gute Idee, Ihre NGINX-Konfiguration zu validieren, um sicherzustellen, dass keine syntaktischen Fehler vorliegen. Führen Sie diesen Befehl aus:
$ sudo nginx -t nginx: die Syntax des Dateinamens der Konfigurationsdatei ist ok nginx: Test des Dateinamens der Konfigurationsdatei war erfolgreich
Führen Sie dann diesen Befehl aus, um NGINX zu starten:
$ sudo nginx
Starten Sie Ihren Videostream. OBS Studio ist ein häufig verwendetes Open-Source-Tool, mit dem Sie durch die Konfiguration eines benutzerdefinierten RTMP-Servers einen Livestream von Ihrer Workstation auf Ihren NGINX-Server durchführen können. Konfigurieren Sie OBS zum Streamen nach rtmp:// NGINX_server /tv/tv2 , wobei NGINX_server die IP-Adresse oder der Hostname Ihres NGINX-Servers ist. Es ist kein Stream-Schlüssel erforderlich.
James verwendet OBS in der Demo nicht, da er das Video nicht live, sondern aus einer Datei streamt. Er startet den Videostream (bei 9:30), indem er das Skript stream.sh ausführt, das folgenden Inhalt hat:
ffmpeg -re -I bbb_sunflower_1080p_60fps_normal.mp4 -vcodec copy -loop -1 -c:a aac -b:a 160k -ar 44100 -strict -2 -f flv rtmp:192.168.1.138/live/bbb
Das Video, das er streamt (angegeben mit dem Argument -I
), ist das Open-Source-Video „Big Buck Bunny“ von blender.org . Einzelheiten zu den anderen Argumenten finden Sie in der ffmpeg
-Dokumentation .
Sobald das Video gestreamt wird, können Sie testen, ob NGINX es mit den von Ihnen konfigurierten Protokollen korrekt bereitstellt. James öffnet drei Instanzen des VLC Media Players und greift auf die entsprechende URL für jede Wiedergabemethode zu. In den URLs ist NGINX_server die IP-Adresse oder der Hostname seines NGINX-Servers:
Wenn Sie eine Videobibliothek oder einen Kurs erstellen, benötigen Sie möglicherweise Funktionen, die über die Möglichkeiten von NGINX Open Source hinausgehen. NGINX Plus umfasst erweiterte Funktionen zur Verbesserung der Leistung und des Endbenutzererlebnisses mit vorgefertigten Modulen. Du kannst:
Während der COVID‑19‑Pandemie stellt NGINX Organisationen im Bildungs‑, öffentlichen Verwaltungs‑ und Non‑Profit‑Sektor eine kostenlose einjährige Lizenz für bis zu fünf Instanzen von NGINX Plus zur Verfügung (vorbehaltlich Überprüfung und Genehmigung). Weitere Einzelheiten finden Sie unter Kostenlose Ressourcen für von COVID‑19 betroffene Websites .
Um das RTMP-Modul in NGINX Plus zu integrieren, laden Sie es dynamisch. Siehe das NGINX Plus-Administratorhandbuch .
In dieser zweiten Demo zeigt James, wie einfach es ist, NGINX Plus mit Ansible und Terraform als Load Balancer für drei Videoserver einzurichten:
Um auf die Dateien zuzugreifen, die James in der zweiten Demo verwendet, sehen Sie sich sein GitHub-Repository an.
Wenn Sie Probleme bei der Implementierung von Video-Streaming oder einem anderen Anwendungsfall haben, helfen wir Ihnen gerne! NGINX-Mitarbeiter und die Community überwachen den NGINX-Kanal auf Stack Overflow1 und beantworten Fragen und Anfragen so schnell wie möglich.
Wenn Sie für eine Organisation an vorderster Front der Pandemie arbeiten und erweiterte Anforderungen haben, qualifizieren Sie sich möglicherweise für die oben genannten NGINX Plus-Lizenzen sowie für eine höhere Stufe des F5 DNS Load Balancer Cloud Service. Weitere Einzelheiten finden Sie unter Kostenlose Ressourcen für von COVID‑19 betroffene Websites .
Schauen Sie sich auch diesen Blog an für einen Überblick über Einfache Möglichkeiten zur Verbesserung der Website-Leistung mit kostenlosen Ressourcen von NGINX und F5.
1Stack Overflow ist eine Website eines Drittanbieters und nicht mit F5 verbunden. Einschl. F5 und seine Tochtergesellschaften lehnen jegliche Haftung für Inhalte (einschließlich allgemeiner Informationen und Lösungsvorschläge für Fragen) ab, die auf Stack Overflow oder anderen Websites von Drittanbietern veröffentlicht werden.
„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."