WebRTC und Videoüberwachung: Wie wir die Verzögerung von Videos von Kameras besiegt haben

Bild

In den ersten Tagen der Arbeit an einem Cloud-basierten Videoüberwachungssystem hatten wir ein Problem, ohne das es möglich war, Ivideon ein Ende zu setzen - es war unser Everest, dessen Aufstieg viel Energie in Anspruch nahm, aber jetzt steckten wir endlich einen Eispickel in die Krone des plattformübergreifenden Rebus.

Das System zur Übertragung von Audio und Video über das Internet sollte nicht von Geräten, Webclients und den von ihnen unterstützten Standards abhängen und auch bei Netzwerkadressübersetzern und Firewalls ordnungsgemäß funktionieren. Der Benutzer der Cloud-Videoüberwachung möchte auf den Dienst zugreifen, auch wenn er analoge Kameras verwendet, und bevorzugt Live-Videoübertragungen auf dem modernsten Gerät.

Es ist sehr wichtig, dass der Benutzer das Video mit minimaler Verzögerung ansehen möchte. Fast die einzige Möglichkeit, Videos mit geringer Latenz in einem Browser anzuzeigen, ist die Verwendung von WebRTC (Web-Echtzeitkommunikation). WebRTC ist eine Reihe von Technologien für die Peer-to-Peer-Video- und Audioübertragung 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, werden wir Sie daran erinnern, warum und warum wir HLS-Technologien unterstützen und wofür wir uns entschieden haben, weiterzumachen.

HLS-Engine: Vor- und Nachteile


Bild
( c )

Die HLS-Technologie (HTTP Live Streaming) wurde von Apple entwickelt. Daher ist es nicht verwunderlich, dass die Unterstützung zum ersten Mal auf Geräten dieser bestimmten Marke verfügbar war. Bisher können fast alle TV-Set-Top-Boxen und viele Geräte, auf denen das Android-Betriebssystem ausgeführt wird, auch Filmmaterial im HLS-Format wiedergeben.

Die HLS-Engine verwendet den bekannten H264-Videocodec in Kombination mit AAC- oder MP3-Audiostreams für das Video-Streaming. Der gesamte Audio- und Videostream ist in einem MPEG-TS-Transportbehälter verpackt. Für die Übertragung über HTTP werden die im Stream enthaltenen Informationen in Fragmente unterteilt, die in m3u8-Wiedergabelisten beschrieben sind. Und nur dann werden diese Fragmente zusammen mit Wiedergabelisten über HTTP übertragen. Das Teilen in Fragmente bedeutet automatisch eine Verzögerung in Sekunden. Ein solches Merkmal des MPEG-TS-Containers.

Die HLS-Engine unterstützt auch Multibit-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 geladen werden können.

Bei aller Einfachheit des Motors ist nicht alles so glatt, wie es scheint. Das Hauptproblem besteht darin, dass sich die Entwickler von Playern von Drittanbietern von den Empfehlungen von Apple entfernt haben, beispielsweise in Bezug auf unterstützte Audioformate. Insbesondere haben viele Entwickler damit begonnen, mit gängigen Audiostreams zu arbeiten: MPEG2-Video, MPEG2-Audio usw. Daher mussten wir unterschiedliche Wiedergabelistenformate für verschiedene Player erstellen.

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

Die Ursprünge der "Bremsen"


Der Hauptgrund für die hohe Verzögerung bei HLS liegt in der Tatsache, dass Programmierer eine Engine entwickelt haben, um ein Bild von höchster Qualität zu erhalten. Daher sind die Parameter des verwendeten Bildintervalls und die Größe des Wiedergabepuffers einfach nicht für die Durchführung von Live-Videoübertragungen geeignet. Aus diesem Grund tritt eine ziemlich hohe Verzögerung bei der Übertragung der Videosequenz auf, die 5 bis 7 Sekunden betragen kann.

Dies ist zum Beispiel ein bisschen für diejenigen, die einen Film von einem Video-Hosting-Server ansehen. Bei Videoüberwachungssystemen kann die Verzögerung bei der Übertragung von Filmmaterial jedoch sehr wichtig sein.

Wenn Sie ein Büro beobachten, in dem Mitarbeiter einmal pro Stunde von Monitoren abgehen, spielt eine Verzögerung von 5 Sekunden keine Rolle. Aber die Leute haben angefangen sich zu beschweren, dass zum Beispiel bei der Ausstrahlung eines Fußballspiels GOOOOOOL bereits im Chat geschrieben wurde, aber das ist nicht im Video :). Wir haben bereits eine Reihe von benutzerdefinierten Fällen, in denen Ivideon Skype fast ersetzen sollte.

Ist es möglich, die Verzögerung in HLS zu besiegen? Die Antwort auf diese Frage klingt wie eine Rede eines erfahrenen Rattenkämpfers bei einem Vortrag vor Anfängern: „Ratten können nicht ausgerottet werden, aber ihre Anzahl kann auf ein vernünftiges Minimum reduziert werden.“ Bei einer Verzögerung von HLS funktioniert das Entfernen auf Null nicht, aber es gibt Lösungen auf dem Markt, die die Verzögerung erheblich reduzieren können.

Flacher Schnitt


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

Jeder, der versuchte, eine große Anzahl kleiner Dateien von einem Medium auf ein anderes zu kopieren, bemerkte wahrscheinlich, dass die Geschwindigkeit, mit der ein solcher Satz geschrieben wird, viel geringer ist als bei einer großen Datei derselben Größe. Ja, und die Intensität des Zugriffs auf die Festplatte nimmt erheblich zu, was sich im Allgemeinen negativ auf die Leistung des gesamten Computers auswirkt. Daher trägt die Übertragung von Videodaten in Form kleiner 10-Sekunden-Fragmente auch zur erhöhten Motorverzögerung bei.

Fassen Sie 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, egal ob es sich um ein Smartphone, Tablet, Laptop oder Desktop-PC handelt. Hauptsache, der Webbrowser ist aktuell und kompatibel mit HTML5 und Media Source Extensions.
  2. Tolle Bildqualität. Mit der verwendeten adaptiven Datenübertragungsfunktion können Sie die Qualität der übertragenen Videosequenz abhängig von der Bandbreite der Internetverbindung dynamisch ändern, während der Algorithmus versucht, die maximale Qualität aufrechtzuerhalten.
  3. Eine komplexe Konfiguration der Benutzergeräte ist nicht erforderlich.

Nachteile:

  1. Eingeschränkte Unterstützung für die Arbeit mit dem Motor auf einigen Geräten.
  2. Hohe Verzögerungen bei der Bildübertragung.
  3. Starker Anstieg des Overheads und der Komplexität der Optimierung aufgrund der Verwendung kleiner Dateien. Aufgrund der Art des Containers können wir niemals eine Verzögerung erhalten, die unter der Segmentgröße liegt.

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

Was ist WebRTC?


Bild
( c )

WebRTC wurde 2011 von Google entwickelt, um Video und Audio mit minimaler Latenz zwischen Browsern und mobilen Anwendungen zu streamen. Hierzu werden das Standard-UDP-Protokoll und spezielle Flusssteuerungsalgorithmen verwendet. Heute ist es ein Open Source Projekt, es wird aktiv von Google unterstützt und entwickelt sich weiter.

WebRTC ist eine Reihe von Technologien für die Peer-to-Peer-Übertragung von Video und Ton. Das heißt, Benutzerbrowser, die WebRTC verwenden, können Daten direkt untereinander übertragen, ohne Remoteserver zum Speichern und Verarbeiten von Daten zu verwenden. Alle Informationen werden auch von Browsern und mobilen Anwendungen der Endbenutzer verarbeitet.

Der Komfort und die großartigen Funktionen dieser Technologie wurden von den Entwicklern aller gängigen Browser geschätzt. Heute ist die WebRTC-Unterstützung in Mozilla Firefox, Opera, Google Chrome (und allen auf Chromium basierenden Browsern) sowie in mobilen Anwendungen für Android und iOS implementiert.

Mit all seinen unbestrittenen Vorteilen weist WebRTC mehrere wesentliche Nachteile auf.

Schwierigkeiten bei der Auswahl


WebRTC ist in Bezug auf die Vernetzung viel komplexer, da es sich um P2P handelt. Es ist schwierig zu debuggen, zu testen, es kann sich unvorhersehbar verhalten. In diesem Fall müssen wir NAT und Firewall überwinden und in Netzwerken arbeiten, in denen UDP blockiert ist.

Die WebRTC-Implementierung von Google ist sehr schwierig zu verwenden. Es gibt sogar ein ganzes Unternehmen, das SDK-Montageservices anbietet. Außerdem war die Implementierung von Google sehr schwierig in unser System zu integrieren, sodass nicht alle Videos transkodiert wurden.

Wir wollten den Benutzern jedoch seit langem die Möglichkeit geben, mit einer vollwertigen "Live" -Videosequenz zu arbeiten und die Verzögerung des Bilds auf dem Bildschirm durch die Ereignisse selbst zu minimieren. Außerdem wollten wir die Verwendung von PTZ-Kameras komfortabler gestalten, wenn Verzögerungen kritisch sind.

Angesichts der Tatsache, dass andere Implementierungen des Kampfes gegen Verzögerungen bislang nur eine eingeschränkte Funktionalität aufweisen und merklich schlechter funktionieren, haben wir uns für WebRTC entschieden.

Was haben wir getan?


Bild

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

Damit WebRTC ordnungsgemäß funktioniert, muss zunächst der Stapel für die Arbeit mit Webvideos technologisch modernisiert werden. Was wir getan haben.

Zunächst haben wir den WebRTC-Signalisierungsprotokollserver über Websocket implementiert und den WebRTC-Peer-Server in der Cloud basierend auf dem SDK webrtc.org bereitgestellt. Seine Aufgabe besteht darin, Videostreams ohne H.-Transcodierung an Client-WebRTC-Peers im H.264 + Opus / G.711-Format zu verteilen.

Wir haben Websocket als Signalisierungsprotokoll gewählt, da es bereits in allen gängigen Webbrowsern Qualitätsunterstützung bietet. Aufgrund dessen ist es möglich, nicht nur den Entwicklungsaufwand erheblich zu reduzieren, sondern auch Zeit und Ressourcen für wiederholten TCP- und TLS-Handshake im Vergleich zu AJAX nicht zu verschwenden.

Tatsache ist, dass WebRTC standardmäßig nicht das Signalisierungsprotokoll bereitstellt, das für die ordnungsgemäße Konfiguration, Unterstützung und Unterbrechung der Echtzeit-Videokommunikation zwischen der Quell- und der Clientanwendung erforderlich ist.

Um die Signalisierungstechnologie unabhängig implementieren zu können, mussten wir einen eigenen Signalserver entwickeln, der mehrere Webprotokolle (Websocet, WebRTC) unterstützt. Und auch mit der Fähigkeit, Sitzungen und Benachrichtigungen in Echtzeit, Videoverwaltung und vielen anderen Parametern sicher zu verwalten.

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

Im mobilen Client haben wir den Player mithilfe des SDK webrtc.org implementiert, da nur darin die Flusssteuerung korrekt implementiert ist, alle bekannten FEC-Schemata (Forward Error Correction) bekannt sind und der Mechanismus zum erneuten Senden von Paketen für alle Browser korrekt implementiert ist. Es ist auch wichtig, dass das SDK webrtc.org von Google aktiv entwickelt wird.

Was ist das Ergebnis der Implementierung von WebRTC?



Um Live-Videos von Kameras anzusehen, haben wir unserem Konto einen neuen optimierten Player hinzugefügt, der auf WebRTC basiert. Es bietet Hochgeschwindigkeits-Videomaterial und beseitigt das Problem der Verzögerungsakkumulation mit zunehmender Betrachtungszeit vollständig.

Nach der Implementierung des WebRTC-Supports im Ivideon-Cloud-Service können wir zuversichtlich sagen, dass unsere Kunden jetzt vollwertige Live-Videos ansehen können. Jetzt beträgt die Verzögerung beim Senden von Filmmaterial nicht mehr als eine Sekunde! Zum Vergleich lieferte die vorherige HLS-Engine eine Videoübertragung mit einer Verzögerung von 5 bis 7 Sekunden. Der Unterschied in der Geschwindigkeit der Videodemonstration ist sehr bedeutend und wird dem Benutzer sofort nach Beginn der Arbeit mit unserem Videodienst auffallen.

Wie erwartet konnten wir durch die Implementierung des neuen Players die Reaktionsfähigkeit von PTZ und die Sprachkommunikation mit der Kamera verbessern.

Bild

Es gibt nur einen subtilen Punkt, auf den wir aufmerksam machen möchten. Der neue WebRTC-Player befindet sich noch im Testmodus. Und deshalb verbinden wir es nicht standardmäßig mit allen unseren Kunden. Sie können es jedoch selbst aktivieren, indem Sie das entsprechende Element in den Kameraeinstellungen aktivieren (dazu müssen Sie zu Ihrem persönlichen Konto gehen ).

Funktionen der WebRTC-Implementierung im Ivideon-Dienst


Bild

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

Dies erklärt die Tatsache, dass wir den WebRTC-Player noch nicht als Standard für alle Benutzer festgelegt haben.

Derzeit empfehlen wir, WebRTC nur in Google Chrome-Browsern zu verwenden. Neuere Versionen von Firefox und Safari unterstützen diese Technologie ebenfalls, sind jedoch leider immer noch instabil.

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

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

Erstens konzentriert sich die Technologie auf die Übertragung von Live-Videos in Echtzeit. Wenn die Bandbreite Ihres Kanals für die Videoübertragung nicht ausreicht, werden Sie daher einen Rückgang der Frames bemerken (bei HLS werden Sie ein Verblassen des Videos und eine Zunahme der Verzögerung bemerken, während die Frames nicht abfallen), aber das Video wird weiterhin in Echtzeit gesendet.

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

Andere Serviceänderungen


Flash ist nicht mehr am automatischen Motorauswahlmechanismus beteiligt. Sie können einen solchen Player weiterhin verwenden, müssen ihn jedoch manuell in den Konto- oder Kameraeinstellungen auswählen. Dies ist keine Modeerscheinung, nur laut Statistiken aus unserem Service von Benutzern, die mit Flash arbeiten, gibt es praktisch keine mehr. Bei dem Versuch festzustellen, 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 an unserem Cloud-basierten Videoüberwachungssystem und unserem persönlichen Konto erwarten. Bleib dran und bleib dran!

Source: https://habr.com/ru/post/de449326/


All Articles