WebRTC und Videoüberwachung: Wie wir die Latenz von Kameravideos überwinden

WebRTC und Videoüberwachung: Wie wir die Latenz von Kameravideos überwinden

Von den ersten Tagen der Arbeit an einem Cloud-Videoüberwachungssystem an standen wir vor einem Problem, ohne dessen Lösung es möglich war, Ivideon ein Ende zu bereiten – es war unser Everest, dessen Besteigung viel Kraft kostete, aber jetzt sind wir endlich hängengeblieben einen Eispickel in die Oberseite des plattformübergreifenden Rebus.

Das System zur Übertragung von Audio und Video über das Internet sollte nicht von der Ausrüstung, den Web-Clients und den von ihnen unterstützten Standards abhängen und auch bei Vorhandensein von Netzwerkadressübersetzern und Firewalls ordnungsgemäß funktionieren. Der Nutzer der Cloud-Videoüberwachung möchte auf den Dienst zugreifen, auch wenn er analoge Kameras verwendet, und sieht sich lieber Live-Videoübertragungen auf dem modernsten Gerät an.

Es ist sehr wichtig, dass der Benutzer das Video mit minimaler Verzögerung ansehen möchte. Die einzige Möglichkeit, Videos mit geringer Latenz in einem Browser anzuzeigen, ist die Verwendung von WebRTC (Web Real-Time Communications). WebRTC ist eine Reihe von Technologien zur Peer-to-Peer-Übertragung von Video und Audio in Browsern, die ursprünglich für die Übertragung und Wiedergabe eines Videostreams mit geringer Latenz entwickelt wurden. Hierzu wird unter anderem das UDP-Protokoll verwendet.

Bevor wir Ihnen sagen, was die neue Engine dem Benutzer bietet, erinnern wir Sie daran, warum und warum wir HLS-Technologien unterstützen und warum wir uns entschieden haben, weiterzumachen.

HLS-Engine: Vor- und Nachteile

WebRTC und Videoüberwachung: Wie wir die Latenz von Kameravideos überwinden
(c)

Die HLS-Technologie (HTTP Live Streaming) wurde von Apple entwickelt, daher ist es nicht verwunderlich, dass sie zunächst auf Apple-Geräten unterstützt wurde. Heute wird HLS-Video auch von nahezu allen Set-Top-Boxen und vielen Geräten mit diesem Betriebssystem unterstützt. Android.

Die HLS-Engine verwendet den bekannten H264-Videocodec in Kombination mit AAC- oder MP3-Audiostreams zum Streamen von Videodaten. Der gesamte Strom an Audio- und Videodaten wird in einen MPEG-TS-Transportcontainer verpackt. Für die Übertragung über das HTTP-Protokoll werden die im Stream enthaltenen Informationen in Fragmente aufgeteilt, die in m3u8-Playlists beschrieben werden. Und erst dann werden diese Fragmente zusammen mit Playlists über HTTP übertragen. Die Aufteilung in Fragmente bedeutet automatisch eine Verzögerung in Sekunden. Eine solche Funktion des MPEG-TS-Containers.

Die HLS-Engine unterstützt auch Multibitrate-Streams, Live/VOD.

Die Hauptvorteile von HLS:

  • integrierte Unterstützung in allen gängigen Browsern;
  • einfache Implementierung (im Vergleich zu WebRTC);
  • Es ist sehr bequem und effizient, alle Arten von Sendungen für ein großes Publikum zu organisieren, da Segmente einmal auf ein CDN hochgeladen werden können.

Trotz der Einfachheit des Motors läuft nicht alles so reibungslos, wie es scheint. Das Hauptproblem besteht darin, dass die Entwickler von Drittanbieter-Playern beispielsweise hinsichtlich der unterstützten Audioformate von Apples Empfehlungen abgewichen sind. Insbesondere begannen viele Entwickler damit, die Möglichkeit hinzuzufügen, mit beliebten Audiostreams zu arbeiten: MPEG2-Video, MPEG2-Audio usw. Infolgedessen mussten wir unterschiedliche Wiedergabelistenformate für verschiedene Player erstellen.

Eines der größten Probleme der HLS-Engine ist jedoch die hohe Latenz bei der Datenübertragung.

Die Ursprünge der „Bremsen“

Der Hauptgrund für die hohe Latenz von HLS liegt darin, dass die Programmierer die Engine so entwickelt haben, dass sie die höchste Bildqualität erhält. Daher sind die Parameter des verwendeten Bildintervalls und die Größe des Wiedergabepuffers für Live-Videoübertragungen einfach nicht geeignet. Dadurch kommt es bei der Übertragung der Videosequenz zu einer relativ hohen Verzögerung, die 5-7 Sekunden betragen kann.

Einerseits ist das nicht viel, zum Beispiel für diejenigen, die einen Film von einem Video-Hosting-Server aus ansehen. Bei Videoüberwachungssystemen kann die Verzögerung bei der Übertragung der Videosequenz jedoch sehr wichtig sein.

Wenn Sie ein Büro beobachten, in dem die Mitarbeiter einmal pro Stunde den Blick von den Monitoren abwenden, dann spielt eine Verzögerung von 5 Sekunden keine Rolle. Aber die Leute fingen an, sich darüber zu beschweren, dass sie zum Beispiel während der Übertragung eines Fußballspiels bereits GOOOOL im Chat geschrieben hatten, das aber noch nicht im Video war :). Wir haben bereits eine Reihe von Anwendungsfällen, in denen Ivideon Skype praktisch ersetzen sollte.

Ist es möglich, die Latenz in HLS zu überwinden? Die Antwort auf diese Frage klingt wie die Rede eines erfahrenen Rattenvernichters bei einem Vortrag für unerfahrene Vernichter: „Ratten können nicht ausgerottet werden, aber ihre Population kann auf ein vertretbares Minimum reduziert werden.“ Es wird also nicht funktionieren, die Verzögerung im HLS auf Null zu reduzieren, aber es gibt Lösungen auf dem Markt, die die Verzögerung erheblich reduzieren können.

Feiner Schnitt

Ein weiterer Nachteil der Engine ist die Verwendung kleiner Dateien zur Datenübertragung. Es scheint, dass das schlecht ist?

Wer schon einmal versucht hat, eine große Anzahl kleiner Dateien von einem Medium auf ein anderes zu kopieren, muss bemerkt haben, dass die Schreibgeschwindigkeit eines solchen Satzes viel geringer ist als die einer großen Datei gleicher Größe. Ja, und die Zugriffsintensität auf die Festplatte nimmt deutlich zu, was sich im Allgemeinen negativ auf die Leistung des gesamten Computers auswirkt. Daher trägt auch die Übertragung von Videodaten in Form kleiner 10-Sekunden-Fragmente zur erhöhten Verzögerung der Engine bei.

Fassen wir alle Vor- und Nachteile der HLS-Technologie kurz zusammen.

Vorteile von HLS:

  1. Fähigkeit, mit jedem Gerät zu arbeiten. Sie können Videos auf jedem modernen Gerät ansehen, sei es ein Smartphone, Tablet, Laptop oder Desktop-PC. Hauptsache, der Webbrowser ist aktuell und mit HTML5 und Media Source Extensions kompatibel.
  2. Hervorragende Bildqualität. Die eingesetzte adaptive Datenübertragungsfunktion ermöglicht es Ihnen, die Qualität der übertragenen Videosequenz abhängig von der Bandbreite der Internetverbindung dynamisch zu verändern, wobei der Algorithmus bestrebt ist, die Qualität so hoch wie möglich zu halten.
  3. Eine komplexe Einrichtung der Benutzerausrüstung ist nicht erforderlich.

Nachteile:

  1. Begrenzte Unterstützung für die Arbeit mit der Engine auf einigen Geräten.
  2. Hohe Latenz bei der Bildübertragung.
  3. Starker Anstieg des Overheads und der Komplexität der Optimierung durch die Verwendung kleiner Dateien. Aufgrund der Beschaffenheit des Containers können wir niemals eine Verzögerung erreichen, die kleiner als die Segmentgröße ist.

Die Nachteile von HLS überwogen für uns die Vorteile und zwangen uns, nach Alternativen zu suchen.

Was ist WebRTC?

WebRTC und Videoüberwachung: Wie wir die Latenz von Kameravideos überwinden
(c)

Die WebRTC-Plattform wurde 2011 von Google entwickelt, um Streaming-Video- und Audiodaten mit minimaler Verzögerung zwischen Browsern und mobilen Anwendungen zu übertragen. Hierzu werden das Standard-UDP-Protokoll und spezielle Flusskontrollalgorithmen verwendet. Heute ist es ein Open-Source-Projekt, das von Google aktiv unterstützt und weiterentwickelt wird.

WebRTC ist eine Reihe von Technologien für die Peer-to-Peer-Video- und Audioübertragung. Das bedeutet beispielsweise, dass die Browser der Benutzer, die WebRTC verwenden, Daten direkt untereinander übertragen können, ohne Remote-Server zum Speichern und Verarbeiten von Daten zu verwenden. Alle Informationen werden auch von den Browsern und mobilen Anwendungen der Endbenutzer verarbeitet.

Die Benutzerfreundlichkeit und die vielfältigen Möglichkeiten dieser Technologie werden von den Entwicklern aller gängigen Browser geschätzt. WebRTC wird derzeit von Mozilla Firefox, Opera, Google Chrome (und allen Chromium-basierten Browsern) sowie von mobilen Apps unterstützt, die unter Windows laufen. Android und iOS.

Trotz all seiner unbestreitbaren Vorteile hat WebRTC mehrere erhebliche Nachteile.

Schwierigkeiten bei der Auswahl

Die WebRTC-Technologie ist im Hinblick auf Netzwerkinteraktionen viel komplexer, da es sich um P2P handelt. Es ist schwierig zu debuggen und zu testen, es kann sich unvorhersehbar verhalten. Gleichzeitig müssen wir NAT und Firewall überwinden und die Arbeit in Netzwerken sicherstellen, in denen UDP blockiert ist.

Die WebRTC-Implementierung von Google ist sehr schwierig zu verwenden. Es gibt sogar ein ganzes Unternehmen, das SDK-Baudienstleistungen anbietet. Außerdem war es sehr schwierig, die Implementierung von Google in unser System zu integrieren, ohne das gesamte Video neu zu kodieren.

Allerdings wollten wir den Nutzern schon lange die Möglichkeit geben, mit einer vollwertigen „Live“-Videosequenz zu arbeiten und die Verzögerung des Bildes auf dem Bildschirm durch die Ereignisse selbst zu minimieren. Außerdem wollten wir den Einsatz von PTZ-Kameras dort, wo Verzögerungen von entscheidender Bedeutung sind, komfortabler gestalten.

Angesichts der Tatsache, dass andere Anti-Lag-Implementierungen immer noch eingeschränkte Funktionalität haben und deutlich schlechter funktionieren, haben wir uns für die Verwendung von WebRTC entschieden.

Was haben wir getan

WebRTC und Videoüberwachung: Wie wir die Latenz von Kameravideos überwinden

Die ordnungsgemäße Implementierung der WebRTC-Plattform ist keine leichte Aufgabe. Jede Fehleinschätzung oder Ungenauigkeit kann dazu führen, dass die Verzögerungen bei der Übertragung der Videosequenz im Vergleich zu anderen Plattformen nicht nur nicht abnehmen, sondern sogar zunehmen.

Damit WebRTC ordnungsgemäß funktioniert, muss zunächst ein technologisches Upgrade des Stacks für die Arbeit mit Webvideos durchgeführt werden. Genau das haben wir getan.

Zuerst haben wir einen WebRTC-Signalisierungsprotokollserver über Websocket implementiert und außerdem einen WebRTC-Peerserver in der Cloud basierend auf dem webrtc.org SDK bereitgestellt. Seine Aufgabe besteht darin, Videostreams im H.264 + Opus/G.711-Format ohne Videotranskodierung an Client-WebRTC-Peers zu verteilen.

Wir haben uns für Websocket als Signalisierungsprotokoll entschieden, da es in allen gängigen Webbrowsern bereits eine gute Unterstützung bietet. Dadurch können Sie im Vergleich zu AJAX nicht nur den Entwicklungsaufwand erheblich reduzieren, sondern auch keine Zeit und Ressourcen durch wiederholte TCP- und TLS-Handshakes verschwenden.

Der Punkt ist, dass WebRTC standardmäßig nicht das Signalisierungsprotokoll bereitstellt, das zum ordnungsgemäßen Einrichten, Aufrechterhalten und Beenden von Echtzeit-Videokommunikation zwischen Quell- und Clientanwendungen erforderlich ist.

Und um die Signalisierungstechnologie unabhängig zu implementieren, mussten wir einen eigenen Signalisierungsserver mit Unterstützung für mehrere Webprotokolle (Websocet, WebRTC) entwickeln. Und mit der Möglichkeit, Sitzungen und Echtzeitbenachrichtigungen sicher zu verwalten, Videos zu verwalten und mehr.

Wir haben die Einschränkungen von P2P überwunden, indem wir die Latenz nicht durch P2P, sondern durch UDP und Flusskontrolle reduziert haben, um die Latenz zu reduzieren. Dies ist auch in WebRTC integriert, da der Hauptanwendungsfall P2P-Konversationen über den Browser sind.

Im mobilen Client haben wir den Player mithilfe des webrtc.org SDK implementiert, da es der einzige ist, der die Flusskontrolle korrekt implementiert, über alle bekannten FEC-Schemata (Forward Error Correction) verfügt und den Mechanismus zum erneuten Senden von Paketen für alle Browser korrekt implementiert . Wichtig ist auch, dass das webrtc.org SDK aktiv von Google weiterentwickelt wird.

Was ist das Ergebnis der Implementierung von WebRTC?


Um Live-Videos von Kameras anzusehen, haben wir Ihrem persönlichen Konto einen neuen optimierten Player basierend auf WebRTC hinzugefügt. Es ermöglicht das Hochgeschwindigkeitsladen von Videos und eliminiert das Problem der Latenzakkumulation bei zunehmender Betrachtungszeit vollständig.

Nach der Implementierung der WebRTC-Unterstützung im Ivideon-Cloud-Service können wir mit voller Zuversicht sagen, dass unsere Kunden jetzt vollwertige Live-Videos ansehen können. Jetzt beträgt die Verzögerung bei der Ausstrahlung der Videosequenz nicht mehr als eine Sekunde! Zum Vergleich: Die vorherige HLS-Engine lieferte Videos mit einer Verzögerung von 5–7 Sekunden. Der Unterschied in der Geschwindigkeit der Videodemonstration ist sehr groß und der Benutzer wird ihn sofort bemerken, nachdem er mit der Arbeit mit unserem Videodienst begonnen hat.

Wie erwartet ermöglichte die Implementierung des neuen Players eine Steigerung der Reaktionsfähigkeit von PTZ und der Sprachkommunikation mit der Kamera.

WebRTC und Videoüberwachung: Wie wir die Latenz von Kameravideos überwinden

Es gibt nur einen subtilen Punkt, auf den wir aufmerksam machen möchten. Der neue WebRTC-Player arbeitet noch im Testmodus. Aus diesem Grund aktivieren wir es nicht standardmäßig für alle unsere Kunden. Sie können es aber auch selbst aktivieren, indem Sie den entsprechenden Punkt in den Kameraeinstellungen aktivieren (gehen Sie dazu auf Arbeitszimmer).

Merkmale der Implementierung von WebRTC im Ivideon-Dienst

WebRTC und Videoüberwachung: Wie wir die Latenz von Kameravideos überwinden

WebRTC ist derzeit noch eine experimentelle Technologie. Die Unterstützung ist noch nicht in allen Browsern und Benutzergeräten und nicht in allen Kameras korrekt implementiert.

Genau das erklärt die Tatsache, dass wir den WebRTC-Player noch nicht zum Hauptstandard für alle Benutzer gemacht haben.

Wir empfehlen vorerst, WebRTC nur in Google Chrome-Browsern zu verwenden. Die neuesten Versionen von Firefox und Safari unterstützen diese Technologie ebenfalls, leider ist sie jedoch noch nicht stabil.

Wir haben die WebRTC-Unterstützung für Browser auf Mobilgeräten noch nicht implementiert. Wenn Sie sich nun von einem mobilen Gerät aus anmelden und WebRTC aktivieren, funktioniert dieser Modus nicht. WebRTC ist jedoch in unseren mobilen Anwendungen für verfügbar Android и iOS.

Zum Abschluss der Geschichte über die Funktionen der WebRTC-Implementierung in unserem Dienst stellen wir noch zwei weitere subtile Punkte fest.

Erstens konzentriert sich die Technologie auf die Übertragung von Live-Videos in Echtzeit. Wenn Ihre Bandbreite daher nicht ausreicht, um die Videosequenz zu übertragen, werden Sie Frame-Ausfälle bemerken (mit HLS werden Sie Video-Fading und eine Erhöhung der Latenz bemerken, während keine Frames verloren gehen), aber das Video wird trotzdem in Echtzeit übertragen Zeit.

Zweitens: Da die Technologie für die Arbeit mit Live-Videos in Echtzeit konzipiert ist, verwenden wir sie nicht für die Arbeit mit archivierten Videodaten.

Weitere Serviceänderungen

Derzeit nimmt Flash nicht mehr am automatischen Engine-Auswahlmechanismus teil. Sie können einen solchen Player weiterhin verwenden, müssen ihn hierfür jedoch manuell in den Konto- oder Kameraeinstellungen auswählen. Dies ist keine Hommage an die Mode, nur laut den Statistiken unseres Dienstes gibt es praktisch keine Benutzer, die mit Flash arbeiten. Und wenn wir herausfinden, ob der Browser des Benutzers dies unterstützt, verlieren wir etwa 2 Sekunden wertvolle Zeit.

Hier finden Sie eine kurze Zusammenfassung der Änderungen, die Sie in unserem cloudbasierten Videoüberwachungssystem und persönlichen Konto erwarten. Bleiben Sie bei uns und verfolgen Sie die Neuigkeiten!

Source: habr.com

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz und VPS-VDS-Servern 🔥 Kaufen Sie zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server | ProHoster