Server WebRTC im Jahr 2020 - Funktionsübersicht

1. Wer braucht serverseitiges WebRTC?



Wie wir alle wissen, ist WebRTC eine Peer-to-Peer-Technologie, die einen Kommunikationskanal zwischen zwei Browsern implementiert, um Audio-, Video- und andere Daten mit geringer Latenz zu übertragen. Die Technologie ist völlig kostenlos. Wenn Ihre Anwendung die Kommunikation in Browsern für zwei Remote-Teilnehmer herstellen muss, können Sie den Webseiten den entsprechenden Javascript-Code hinzufügen, und das Problem ist behoben. Browser kommunizieren direkt, es ist kein Server erforderlich.



Serverseitiges WebRTC tritt in die Szene ein, wenn mehr als zwei Teilnehmer erforderlich sind und Daten von einem Teilnehmer gleichzeitig an mehrere andere Teilnehmer übertragen werden.



In diesem Fall kann einer der Teilnehmer der Server sein, der eine Eins-zu-Eins-Kommunikation mit dem ersten Teilnehmer herstellt, Daten von ihm empfängt und dann auch im

Eins-zu-Eins- Modus eine Kommunikation mit anderen Teilnehmern herstellt und diese Daten sendet. Jene. Der Server verfügt über viele Peer-to-Peer-Kommunikationskanäle und kopiert einfach Daten auf alle diese Kanäle. In der WebRTC-Terminologie dient ein solcher Server als Selective Forwarding Unit (SFU).



Bild



Gruppenkommunikation ist jedoch nicht nur mit der SFU möglich. Sie fragen sich vielleicht, warum nicht jeder ohne Server Daten an alle senden kann, und Sie haben absolut Recht. Dies nennt man MESH - Kommunikation.



Hier gibt es zwei wichtige Punkte:



  1. Im MESH-Schema sendet und empfängt jeder Teilnehmer N-1-Datenströme, wobei N die Gruppengröße ist. Jene. Die Anforderungen an die Upload-Geschwindigkeit für jeden Teilnehmer am MESH-Programm steigen mit dem Wachstum der Gruppe. Während im SFU-Schema jeder Teilnehmer immer nur einen Stream sendet. Nicht jeder Teilnehmer verfügt über eine Netzwerkverbindungsgeschwindigkeit, die das Senden von N-1-Streams verarbeiten kann.
  2. , MESH - . , , - . MESH , , VP8/VP9/H264 4 . WebRTC – , . , (PeerConnection). , 720p 30% , . .


Aufgrund dieser beiden Schlüsselpunkte wird das MESH-Schema mit zunehmender Teilnehmerzahl schlecht umgesetzt, und das SFU-Schema muss verwendet werden.



Bei einer großen Anzahl von Kommunikationsteilnehmern ist daher ein Server (SFU) erforderlich.

Geben wir Beispiele für solche Anwendungen, bei denen ein Server benötigt wird:



  • Videokonferenzen mit vielen Teilnehmern (jeder geliebte Zoom verwendet den WebRTC-Server wie alle ähnlichen Dienste).
  • Live-Videoüberwachung, wenn Videos von einer Kamera an mehrere Zuschauer und Aufnahmegeräte gesendet werden. Sicherheitssysteme, Überwachung.
  • Interaktive Systeme wie Online-Auktionen, Tutorials und andere Webanwendungen, die eine geringe Audio- / Videolatenz erfordern.


2. Was können Sie 2020 verwenden, wenn Sie noch serverseitiges WebRTC benötigen?



Cloud-Service oder alleine?



Hier zunächst die üblichen IT-Argumente für das eine oder andere: Die Cloud liefert und spart IT-Kosten für Server, Konfiguration, Skalierbarkeit. Aber wenn alles alleine klappt (es gibt keine Garantie), wird es viel billiger. Schließlich müssen Sie für einen Cloud-Service monatlich bezahlen.



Nun zu den Argumenten, die für die oben beschriebenen Anwendungen spezifisch sind. Wenn Sie ein globales, großes Publikum in verschiedenen Ländern und Regionen haben, wird es für Sie allein schwierig sein, alles zusammenzustellen. Ein Cloud-Service eignet sich beispielsweise für eine Sotheby's-Auktion. Wenn Sie jedoch 2-3 Unternehmensfilialen in verschiedenen Städten mit 200-500 Benutzern haben und für diese ein Webinar / eine Konferenz / Schulung usw. organisieren müssen, können Sie mehrere Server selbst auf AWS oder ähnlichen Hosting-Plattformen mieten und dort installieren Software WebRTC Server, und alles wird funktionieren. Server können sich sogar in Ihrem Unternehmen befinden, wenn die Geschwindigkeit der Internetverbindung dies zulässt. Nun, für alle Lösungen in kleinerem Maßstab kann alles selbst durchgeführt werden.



Derzeit sind zwei Cloud-WebRTC-Dienste bekannt und getestet: Millicast und Phenix... Beide haben eine globale Abdeckung, eine gute Konnektivität zwischen Servern auf verschiedenen Kontinenten (benötigen Sie diese?) Und tatsächlich eine Videolatenz (Latenz) von einer halben Sekunde oder weniger.



Lassen Sie uns jetzt über "auf eigene Faust" sprechen.



Hier benötigen Sie die WebRTC-Serversoftware. Es gibt drei Möglichkeiten, einen solchen Server zu erhalten.



  1. Machen Sie es sich mit einer offenen API. Die bekannteste davon ist die Google c ++ WebRTC-API . Sie können auch die GStreamer-API verwenden . Eine interessante Implementierung in Go: Pion WebRTC . Sie benötigen erfahrene C ++ - Programmierer und viel Geduld und Zeit zum Debuggen. Ich habe in meinem vorherigen Artikel ausführlich über die Schwierigkeiten dieses Ansatzes geschrieben .
  2. . Ant Media Server, Kurento, Janus, Jitsi. , , , . github , . , , , . , c++ . . , .
  3. . , , . Red5 Pro, Flashphoner Unreal Media Server.


WebRTC .



Dies ist das problematischste Thema. Angenommen, Ihr Unternehmen veröffentlicht ein Softwareprodukt, in dem Sie einen WebRTC-Server implementieren müssen. Es sei ein Videoaufzeichnungs- und Überwachungssystem für Flughafenterminals, Bahnhöfe und Verkehrsknotenpunkte. Oder medizinische Geräte mit der bereits vorhandenen Begleitsoftware zum Senden und Aufzeichnen von Videos von Endoskopen, die vor dem Senden dieses Videos an einen Browser erweitert werden muss. Oder ein Flugsimulationssystem, bei dem die Möglichkeit der Visualisierung in einem Browser und / oder der Interaktion mit einem entfernten Benutzer implementiert werden muss. Wir sind ständig mit ähnlichen Anforderungen konfrontiert. Ihr vorhandenes System weist viele Einschränkungen auf. Internetzugang ist möglicherweise nicht verfügbar. Keine Wolken. Sie können keine Ports auf dem Server öffnen. Nur Windows oder nur Linux. Manchmal sogar nur eine bestimmte Version von Windows, weil das vorhandene Produkt dafür geschärft wird. WebRTC-Server,Was einem solchen System hinzugefügt wird, muss an all diese Einschränkungen angepasst werden.



Hier haben Sie möglicherweise keine andere Wahl, als einen Open-Source-Server wie Ant Media Server oder Janus zu verwenden und zu ändern. Dies ist die Situation unter Linux. Für Windows ist Unreal Media Server geeignet - dies ist Software, die nur für Windows geschrieben und optimiert wurde.



Der WebRTC-Server ist sehr ressourcenintensiv



Beachten Sie dies bei der Planung Ihrer Ressourcen. Die Gründe für eine solche Ressourcenintensität wurden von mir in einem früheren Artikel beschrieben , aber die Schlussfolgerung ist, dass die Skalierbarkeit durch einen sehr starken Prozessor oder durch Hinzufügen physischer Server erreicht wird.



Hier ist ein Diagramm der Tests, die mit Unreal Media Server v13.0 auf einer AWS EC2 m4.2xlarge-Instanz durchgeführt wurden: Intel Xeon 8-Kern-CPU E5-2686 v4 bei 2,30 GHz, 32 Gb RAM, Windows Server 2016.



Bild



Wie Sie dem Diagramm entnehmen können, mit 1000 gleichzeitigen Web-Playern Für diese IP-Kamera beträgt die Prozessorlast 5% beim RTMP-Protokoll und 75% beim WebRTC-Protokoll, d. h. WebRTC ist mehr als zehnmal ressourcenintensiver als RTMP.