Alles begann, als ich mit OBS Studio und einer Art Programm zum Animieren von Desktop-Hintergründen ein Video-Logo aus dem Logo erstellte (das auch unter der aktuell wiedergegebenen Musik animiert wurde). In diesem Moment wurde mir klar, dass OBS Studio VIEL mehr kann als nur Spiele zu streamen. Nach einer genaueren Bekanntschaft mit OBS Studio behauptet sie, das coolste Programm zu sein, das ich je getroffen habe .
Ich musste eine kleine Veranstaltung für Freunde streamen, aber da ich die Ausrüstung für guten Sound und den Wunsch habe, cool zu sein, war ich verwirrt über die Organisation des Streams mit einem separaten Sound und mehreren Kameras. Aus verschiedenen Gründen stellte sich heraus, dass der Stream so lala war, aber nach dieser Erfahrung scheine ich mir vorzustellen, wie er sein sollte. Und ich möchte teilen. Hier.

Was?
Die Idee ist, 2-3 Mobilfunkbetreiber zu finden, die zu verschiedenen Veranstaltungsorten gehen, mit Menschen kommunizieren, den Verkehr abnehmen usw. (Nun, kurz gesagt, wie ernsthafte Leute). Und jemand sitzt, kommuniziert mit ihm im Radio und bildet aus all dem (und etwas anderem, zum Beispiel jeder Art von Check-in-Fenstern / Monitoren / Projektoren) interessante Videoinhalte, deren Anschauen nicht langweilig ist.
Sie können auch die Bildschirme mehrerer Computer in einem Stream kombinieren. Dies kann möglicherweise für Spiele hilfreich sein. Obwohl es höchstwahrscheinlich andere Technologien speziell für diese Aufgabe gibt.
Warum?
Weil es Ihnen erlaubt, sehr cool zu sein und die technologische Obergrenze der Stream-Qualität fast umsonst stark zu verschieben.
Wenn Sie eine Reihe von Videostreams verwenden, wird die Coolness des Streams von der kreativen und organisatorischen Komponente (also von der Qualität der Verbindungen) bestimmt.
Was?
- Laptop
1.1. Obs Studio
1.2. Nginx mit RTMP- Modul - Betreiber mit ihren Smartphones
2.1. Eine Art App, die die Anfrage "stream rtmp" ausgibt, zum Beispiel Larix Broadcaster oder (wenn es etwas mehr Geld gibt) Ace Live Streaming oder BitStream - Stabiles WLAN, vorzugsweise 5 GHz
- Stabiler Uplink
Wenn Sie noch etwas haben, können Sie zumindest bei stationären Kameras (bei denen es sich um ein relativ hochwertiges Web handeln kann) einen guten Ton erzeugen.
Und wenn es einen anderen Linux-Computer gibt (sie sagen, dass sogar der Raspberry Pi für ≤3 Streams in Ordnung ist), können Sie den Hauptcomputer und sein Netzwerk leicht auslagern, um den Stream zu verarbeiten und zu senden.
Wie?
Das anerkannte Protokoll für Video-Streaming ist RTMP . Der Versuch, etwas anderes zu verwenden , führt zu wilden Verzögerungen. Dies war mein Hauptfehler.
Fairerweise ist die proprietäre Technologie NewTek NDI (danke, Alexsey ) erwähnenswert , die cooler zu sein scheint als RTMP. Für unseren Benutzerfall erfordert die Verwendung von NDI jedoch viel zusätzliches Geld.
Es stellt sich heraus, dass das Akzeptieren und Umleiten eines RTMP-Streams an OBS Studio so einfach ist wie das Schälen von Birnen. Sie müssen nur nginx mit einem benutzerdefinierten Modul kompilieren und eine Konfiguration schreiben. Aber dazu später mehr.
Auf eine gute Weise müssen Sie so etwas tun:

Geben Sie Mobiltelefonen also kein Internet, damit sie keine Ressourcen für etwas anderes als einen Stream ausgeben.
Wenn das Internet jedoch bereits über ein gutes WLAN verfügt (und bei 5 GHz kein zusätzlicher Zugangspunkt vorhanden ist), können Sie vorhandene Verbindungen nicht verachten und verwenden. Es ist jedoch immer noch wünschenswert, den endgültigen Stream von einer anderen Verbindung oder im Extremfall von derselben, jedoch über eine Leitung, zu senden.
Wenn Streams von Kameras empfangen und der endgültige Stream über dasselbe WLAN gesendet werden muss, testen Sie die Stabilität sorgfältig (und beachten Sie, dass sie stark abnimmt, wenn eine Vielzahl von Geräten auf dieses WLAN springt).
Wie hebe ich den RTMP-Server an?
Es ist besser, dies unter Linux zu tun, um keine Probleme mit allen Arten von MINGW / MSYS zu haben. Und auf einer separaten Hardware (nicht unbedingt leistungsstark). Oder im Docker können Sie diesen Abschnitt überspringen, da die Docker-Datei bereits vorhanden ist . Über WSL ist dies ebenfalls möglich, es ist jedoch erforderlich, den TCP-Port 1935 in der Firewall manuell weiterzuleiten.
Hier finden Sie eine großartige Anleitung zum Einrichten Ihres eigenen privaten RTMP-Servers mit nginx , die auch im Dock geschrieben ist . Eine kurze Nacherzählung des Freestyles:
Wir setzen die Abhängigkeiten:
sudo apt install build-essential libpcre3 libpcre3-dev libssl-dev
Laden Sie hier die neueste Mainline-Version der Quelle herunter:
wget http://nginx.org/download/nginx-1.15.2.tar.gz
Laden Sie die neueste Version des RTMP-Moduls herunter:
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip -O rtmp-module.zip unzip !$ -d .
Erstellen Sie ein Makefile:
./configure --with-http_ssl_module --add-module=./nginx-rtmp-module-master
Wenn Sie vor Erreichen der Configuration summary
, beheben wir die Probleme.
Dieser Befehl konfiguriert Ihren Streamer nginx so, dass er in /usr/local/nginx/
lebt und mit dem Befehl sudo /usr/local/nginx/sbin/nginx
. Somit fühlt Nginx aus dem Repository nichts. Dies kann durch Untersuchen von ./configure --help
geändert werden.
Wir kompilieren:
make -j4
Installieren:
echo "nginx with RTMP module" > description-pak sudo checkinstall --pkgname nginx-rtmp --provides nginx --nodoc --deldesc -y sudo mkdir /usr/local/nginx/logs/ # Doesn't start without it
Grundsätzlich ist die Verwendung von make install
in diesem Fall sicher, aber dennoch nicht erforderlich .
Überprüfen Sie
$ /usr/local/nginx/sbin/nginx -v nginx version: nginx/1.15.2
Anpassen
sudo vim /usr/local/nginx/conf/nginx.conf
Fügen Sie am Ende die RTMP-Serverkonfiguration hinzu:
rtmp { server { listen 1935; application live { live on; record off; } } }
Bei Bedarf können Sie den HTTP-Server so konfigurieren, dass Statistiken angezeigt werden .
Das Dock beschreibt, was Sie sonst noch konfigurieren können. Es gibt wirklich viele Dinge. Wenn Sie wissen, wie es besser geht, füge ich gerne einen Abschnitt über die Serverkonfiguration mit Material aus den Kommentaren hinzu.
Wir machen es bequem
alias rtmp-start="sudo /usr/local/nginx/sbin/nginx" alias rtmp-stop="sudo /usr/local/nginx/sbin/nginx -s stop" alias rtmp-status="cat /usr/local/nginx/logs/nginx.pid"
Was tun mit dem RTMP-Server?
Senden Sie einen Stream von der mobilen App an rtmp://< IP>:1935/live/habr
wobei live
der Name der RTMP-Anwendung in der nginx-Konfiguration ist und habr
der Stream-Schlüssel ist , der für verschiedene Kameras geändert werden muss.
Wenn Sie die Anzeige von Statistiken konfiguriert haben (und nicht vergessen haben, den Pfad zur Datei stat.xsl
zu ändern), überprüfen Sie, ob der Stream angekommen ist (unter http: // localhost: 8080 / stat ).
Stellen Sie eine Verbindung zu allen OBS Studio-Streams her.


GEWINN !!!
Natürlich kann der Server nicht nur lokal sein, sondern auch von außen zugänglich sein, sodass Sie dasselbe tun können, jedoch nicht über WLAN, sondern über das Internet. Sie können Ihr eigenes Analogon zu Instagram-Gruppen-Streams erstellen und im Allgemeinen unbegrenzte Möglichkeiten))
Ist das alles
Es gibt noch ein paar Dinge, die ich aus Fehlern gelernt habe und die ich gerne teilen möchte:
- Es ist möglich und notwendig, die Zielbitrate des endgültigen Streams während der Übertragung zu ändern und an die Konnektivität anzupassen. Restream zeichnet zum Beispiel coole Grafiken, die zeigen, wie viel Sie senken müssen. Es gibt eine Pull-Anforderung, um automatisch eine Bitrate auszuwählen , die jedoch blockiert ist (()
- Es gibt einen solchen Keyframe-Intervall- Parameter, der länger als eine Sekunde sein muss (dies muss manuell in der erweiterten Version der Ausgabeeinstellungen festgelegt werden). Restream spricht erst nach dem Ende des Streams darüber, UX ist von seiner besten Seite! )))
- Es gibt eine weitere äußerst nützliche Pull-Anfrage , an der ich teilgenommen habe und für die ich aktiv ertrinke, die aber auch ins Stocken geraten zu sein scheint, obwohl sich der Betreuer kürzlich daran erinnert und sie überdacht hat. Wie, pliz, wenn Sie auch denken, dass das Fehlen der Monitor- Taste auf den Audiokanälen schrecklich ist.
Jetzt ist alles sicher, danke für deine Aufmerksamkeit ^ _ ^
PS
Für diejenigen, die immer noch versuchen, Nginx für die allgegenwärtige Venda zu bauen, hier ist der Rechen, auf dem ich gelaufen bin. Es stellte sich heraus, dass diese Suche umsonst so viel Angst vor diesem Prozess hatte:
- Es ist erforderlich, den Quellcode GENAU von Mercurial zu übernehmen (es ist gut, dass es eine Schaltfläche zum Herunterladen der Zip-Datei gibt). In den Archiven der Site befindet sich kein Ordner
src\os\win32
. Wenn Sie Quellcodes von der Site haben, tritt ein Fehler auf don't know how to make 'src/os/win32/ngx_win32_config.h'
. - Benötigen Sie ein altes MinGW von hier und nicht
etwas weniger alt MSYS2. - Bei der Installation von
mingw-developer-toolkit
Sie das Kontrollkästchen von Perl entfernen. Perl muss Windows sein. - Diese Antwort hat gut geholfen.
- Beim Kompilieren wird
rc.exe
aus %ProgramFiles(x86)%\Windows Kits\10\bin\10.0.16299.0\x64
. Sie müssen diesen Ordner manuell in PATH hinzufügen - Es ist notwendig, das Flag
-WX
aus CFLAGS
im Makefile zu entfernen, damit Vorings die Kompilierung nicht unterbrechen. Es gibt Vorings in 1.15.3 ...
Insgesamt habe ich so etwas bekommen: