
Von den ersten Tagen der Entwicklung unseres Cloud-Videoüberwachungssystems an standen wir vor einem Problem, dessen Lösung entscheidend war – es war unser Everest, dessen Besteigung viel Kraft kostete. Doch jetzt haben wir schließlich den Eispickel auf die Spitze des plattformübergreifenden Rätsels gesetzt.
Das System zur Übertragung von Ton und Video über das Internet darf nicht von der Hardware, den Web-Clients und deren unterstützten Standards abhängen und sollte auch bei Vorhandensein von Network Address Translators und Firewalls korrekt funktionieren. Der Nutzer der Cloud-Videoüberwachung möchte Zugang zum Dienst erhalten, selbst wenn er analoge Kameras verwendet, und bevorzugt es, den Live-Stream auf den neuesten Geräten anzusehen.
Es ist sehr wichtig, dass der Nutzer Videos mit minimaler Verzögerung ansehen möchte. Die praktisch einzige Möglichkeit, Videos mit geringer Latenz im Browser anzuzeigen, ist die Verwendung von WebRTC (Web Real-Time Communications). WebRTC ist ein Technologiesatz für die Peer-to-Peer-Übertragung von Video und Audio in Browsern, der ursprünglich für die Übertragung und Wiedergabe von Video-Streams mit geringer Latenz entwickelt wurde. Dafür wird unter anderem das UDP-Protokoll verwendet.
Bevor wir Ihnen erzählen, welche Vorteile die neue Engine dem Nutzer bietet, erinnern wir daran, warum wir die HLS-Technologien unterstützen und warum wir beschlossen haben, weiterzugehen.
HLS-Engine: Vor- und Nachteile

()
Die Technologie HLS (HTTP Live Streaming) wurde von Apple entwickelt, daher ist es nicht überraschend, dass die Unterstützung zunächst auf Geräten dieser Marke verfügbar war. Heutzutage können nahezu alle Fernsehgeräte und viele Android-betriebene Geräte Videoinhalte im HLS-Format wiedergeben.
Die HLS-Engine verwendet für die Videostreaming den weithin bekannten Video-Codec H264 in Kombination mit AAC- oder MP3-Audioströmen. Alle Audio- und Videodaten werden in einem MPEG-TS-Transportcontainer verpackt. Für die Übertragung über das HTTP-Protokoll wird die im Stream enthaltene Information in Fragmente unterteilt, die in m3u8-Playlists beschrieben sind. Erst danach werden diese Fragmente zusammen mit den Playlists über HTTP übertragen. Die Fragmentierung führt automatisch zu einer Verzögerung in Sekunden. Diese Eigenschaft des MPEG-TS-Containers.
Die HLS-Engine unterstützt ebenfalls Multi-Bitrate-Streams, Live/VOD.
Die Hauptvorteile von HLS:
- eingebaute Unterstützung in allen gängigen Browsern;
- einfache Implementierung (im Vergleich zu WebRTC);
- es ist sehr praktisch und effizient, verschiedene Übertragungen für ein großes Publikum zu organisieren, da Segmente einmal auf das CDN hochgeladen werden können.
Obwohl der Engine recht einfach ist, gibt es einige Herausforderungen, die nicht so glatt verlaufen, wie es scheint. Das Hauptproblem besteht darin, dass die Entwickler von Drittanbietermedienplayern von den Empfehlungen von Apple abgewichen sind, insbesondere bezüglich der unterstützten Audioformate. Viele Entwickler haben begonnen, die Möglichkeit zu integrieren, mit gängigen Audiostreams zu arbeiten: mpeg2 Video, mpeg2 Audio usw. Daher mussten verschiedene Playlist-Formate für unterschiedliche Player geschaffen werden.
Eine der größten Herausforderungen des HLS-Engines ist jedoch die hohe Latenz bei der Datenübertragung.
Ursprünge der 'Verzögerung'
Die Hauptursache für die hohe Latenz bei HLS liegt darin, dass Programmierer die Engine so entwickelt haben, dass sie die höchstmögliche Bildqualität erhält. Daher sind die Parameter des verwendeten Frame-Intervalls und das Volumen des Wiedergabepuffers einfach nicht für Live-Übertragungen geeignet. Dies führt zu einer erheblichen Verzögerung bei der Übertragung des Videostreams, die 5 bis 7 Sekunden betragen kann.
Auf der einen Seite ist dies nicht viel, z.B. für diejenigen, die einen Film von einem Video-Hosting-Server ansehen. Für Überwachungssysteme kann jedoch die Verzögerung bei der Übertragung des Videostreams von großer Bedeutung sein.
Wenn Sie ein Büro beobachten, in dem Mitarbeiter jede Stunde eine Pause von ihren Bildschirmen einlegen, spielt eine Verzögerung von 5 Sekunden keine Rolle. Doch die Leute fangen an zu klagen, dass beispielsweise beim Übertragen eines Fußballspiels im Chat bereits GOOOOOL geschrieben wurde, das Video jedoch noch nicht zeigt, was passiert ist. Wir haben bereits mehrere Anwendungsfälle, in denen Ivideon praktisch Skype ersetzen muss.
Kann man die Verzögerung bei HLS besiegen? Die Antwort auf diese Frage klingt wie die Ansprache eines erfahrenen Kammerjägers vor einer Gruppe von angehenden Rattenfängern: „Ratten kann man nicht vollständig ausrotten, aber ihre Population auf ein vernünftiges Minimum reduzieren.“ So ist es auch mit der Verzögerung im HLS; sie auf null zu reduzieren, ist unmöglich, aber es gibt Lösungen auf dem Markt, die die Verzögerung erheblich verringern können.
Feines Timing
Ein weiterer Nachteil der Engine ist die Verwendung von kleinen Dateien zur Datenübertragung. Was könnte daran schlecht sein?
Jeder, der schon einmal versucht hat, eine große Anzahl kleiner Dateien von einem Speichermedium auf ein anderes zu kopieren, hat sicherlich bemerkt, dass die Schreibgeschwindigkeit für solch eine Gruppe deutlich niedriger ist als die eines einzelnen großen Datei mit demselben Volumen. Zudem steigt die Intensität der Zugriffe auf die Festplatte erheblich, was sich insgesamt negativ auf die Leistung des gesamten Computers auswirkt. Daher trägt die Übertragung von Videodaten in Form kleiner, 10-sekündiger Fragmente ebenfalls zur erhöhten Verzögerung des Systems bei.
Lassen Sie uns die Vor- und Nachteile der HLS-Technologie kurz zusammenfassen.
Vorteile von HLS:
- Kompatibilität mit sämtlichen Geräten. Sie können Videos auf jedem modernen Gerät ansehen, sei es ein Smartphone, Tablet, Laptop oder Desktop-PC. Wichtig ist, dass der Webbrowser eine aktuelle Version hat und mit HTML5 sowie den Media Source Extensions kompatibel ist.
- Hervorragende Bildqualität. Die verwendete Funktion der adaptiven Datenübertragung ermöglicht es, die Qualität des übertragenen Videostreams dynamisch je nach Bandbreite der Internetverbindung anzupassen. Dabei strebt der Algorithmus an, die Qualität maximal zu halten.
- Es ist keine komplexe Benutzerhardware-Konfiguration erforderlich.
Nachteile:
- Eingeschränkte Unterstützung für den Betrieb mit bestimmten Geräten.
- Hohe Latenzen bei der Bildübertragung.
- Signifikante Erhöhung des Overheads und schwierige Optimierung aufgrund der Verwendung kleiner Dateien. Wegen der Container-Eigenschaften können wir niemals eine Latenz unterhalb der Segmentgröße erreichen.
Die Nachteile von HLS haben für uns die Vorteile überwogen und uns dazu gebracht, nach alternativen Optionen zu suchen.
Was ist WebRTC

()
Die WebRTC-Plattform wurde 2011 von Google entwickelt, um Video- und Audiodaten mit minimaler Latenz zwischen Browsern und mobilen Anwendungen zu übertragen. Dafür wird das Standardprotokoll UDP und spezielle Flusskontrollalgorithmen verwendet. Heute handelt es sich um ein Open-Source-Projekt, das aktiv von Google unterstützt und weiterentwickelt wird.
WebRTC ist eine Technologie-Suite für die Peer-to-Peer-Übertragung von Audio und Video. Das bedeutet, Benutzerbrowser können mithilfe von WebRTC Daten direkt untereinander austauschen, ohne auf entfernte Server zur Speicherung und Verarbeitung zurückgreifen zu müssen. Alle Informationen werden zudem von den Browsern und mobilen Anwendungen der Endbenutzer verarbeitet.
Die Benutzerfreundlichkeit und die umfangreichen Möglichkeiten dieser Technologie wurden von Entwicklern aller gängigen Browser geschätzt. Heute wird WebRTC in Mozilla Firefox, Opera, Google Chrome (und allen Chromium-basierten Browsern) sowie in mobilen Anwendungen für Android und iOS unterstützt.
Trotz ihrer unbestreitbaren Vorteile hat WebRTC auch einige wesentliche Nachteile.
Herausforderungen bei der Auswahl
Die WebRTC-Technologie ist viel komplexer in Bezug auf Netzwerkinteraktionen, da sie auf P2P basiert. Sie ist schwer zu debuggen und zu testen und kann unvorhersehbar agieren. Dabei müssen wir NAT und Firewalls überwinden und sicherstellen, dass sie in Netzwerken funktioniert, in denen UDP blockiert ist.
Die Implementierung von WebRTC von Google ist sehr komplex. Es gibt sogar ein ganzes Unternehmen, das Dienstleistungen zur Erstellung von SDKs anbietet. Zudem war es sehr schwierig, die Google-Implementierung mit unserem System zu integrieren, ohne dabei das gesamte Video neu zu kodieren.
Wir haben schon lange darüber nachgedacht, unseren Nutzern die Möglichkeit zu geben, mit echtem "Live"-Videomaterial zu arbeiten und die Verzögerung des Bildes auf dem Bildschirm im Vergleich zu den Ereignissen selbst zu minimieren. Darüber hinaus wollten wir die Nutzung von PTZ-Kameras komfortabler gestalten, da Verzögerungen hier von entscheidender Bedeutung sind.
Angesichts der Tatsache, dass andere Ansätze zur Bekämpfung von Lags derzeit nur eingeschränkte Funktionalitäten bieten und deutlich schlechter arbeiten, haben wir uns entschieden, WebRTC zu nutzen.
Was wir getan haben

Die Plattform WebRTC erfolgreich zu implementieren, ist eine anspruchsvolle Aufgabe. Jeder Fehler oder jede Ungenauigkeit kann dazu führen, dass die Verzögerungen bei der Übertragung von Videomaterial im Vergleich zu anderen Plattformen nicht nur nicht verringert, sondern sogar erhöht werden.
Für das korrekte Funktionieren von WebRTC ist es in erster Linie erforderlich, den Technologie-Stack für die Arbeit mit Web-Videos zu modernisieren, was wir auch getan haben.
Zunächst haben wir einen WebRTC-Signalisierungsserver über Websocket implementiert und einen WebRTC-Peer-Server in der Cloud auf Basis des SDK webrtc.org bereitgestellt. Dieser dient der Verteilung von Video-Streams an die Client-WebRTC-Peer im Format H.264 + Opus/G.711, ohne dass das Video neu codiert werden muss.
Wir haben Websocket als Signalisierungsprotokoll gewählt, da es bereits eine umfassende Unterstützung in allen gängigen Webbrowsern bietet. Dadurch können die Entwicklungskosten erheblich gesenkt werden, und es ist nicht notwendig, Zeit und Ressourcen für wiederholte TCP- und TLS-Handshake-Vorgänge im Vergleich zu AJAX aufzuwenden.
Der Grund dafür ist, dass WebRTC standardmäßig kein Signalisierungsprotokoll bereitstellt, das für die korrekte Einrichtung, Unterstützung und Beendigung von Echtzeit-Videokommunikation zwischen den Quell- und Client-Anwendungen erforderlich ist.
Um die Signalisierungstechnologie selbst zu implementieren, mussten wir unseren eigenen Signalisierungsserver mit Unterstützung für mehrere Webprotokolle (Websocket, WebRTC) entwickeln. Außerdem sollte er in der Lage sein, Sitzungen sicher zu verwalten, Echtzeitbenachrichtigungen zu bearbeiten, Video zu steuern und viele andere Parameter zu verwalten.
Wir haben die P2P-Einschränkungen überwunden, indem wir die Latenz nicht durch P2P, sondern durch UDP und latenzreduzierendes Traffic-Management verringert haben. Dies ist auch in WebRTC integriert, da das Hauptanwendungsfeld p2p-Gespräche über den Browser ist.
In der mobilen App haben wir einen Player mit dem SDK von webrtc.org implementiert, da nur dieses das Traffic-Management korrekt umsetzt, alle bekannten Forward Error Correction (FEC)-Methoden verwendet und den Mechanismus zur Wiederholung von Paketen für alle Browser richtig implementiert. Zudem ist es wichtig, dass das SDK von webrtc.org aktiv von Google weiterentwickelt wird.
Was sind die Ergebnisse der Implementierung von WebRTC?
Für die Anzeige von Live-Videoübertragungen von Kameras haben wir im Kundenbereich einen neuen optimierten Player auf Basis von WebRTC hinzugefügt. Dieser gewährleistet hohe Ladegeschwindigkeiten für Videoinhalte und beseitigt vollständig das Problem der zunehmenden Latenz mit der Zeit.
Mit der Einführung der WebRTC-Unterstützung im Ivideon-Cloud-Service können wir unseren Kunden nun mit voller Zuversicht eine hochwertige Live-Videoübertragung anbieten. Die Verzögerung bei der Videoübertragung beträgt jetzt nicht mehr als eine Sekunde! Zum Vergleich: Der frühere HLS-Engine lieferte Videos mit einer Verzögerung von 5-7 Sekunden. Der Unterschied in der Geschwindigkeit der Videoübertragung ist erheblich, und Benutzer werden dies sofort nach der Nutzung unseres Video-Services bemerken.
Wie bereits vermutet, hat die Implementierung des neuen Players die Reaktionsfähigkeit von PTZ und der Sprachkommunikation mit der Kamera verbessert.

Es gibt jedoch einen kleinen Punkt, auf den wir hinweisen möchten. Der neue WebRTC-Player befindet sich derzeit im Testmodus. Daher schalten wir ihn standardmäßig nicht für alle unsere Kunden ein. Sie können ihn jedoch selbst aktivieren, indem Sie die entsprechende Option in den Kameraeinstellungen aktivieren (dafür müssen Sie in Ihre ).
Merkmale der WebRTC-Implementierung im Ivideon-Service

WebRTC ist derzeit noch eine experimentelle Technologie. Ihre Unterstützung ist bislang nicht in allen Browsern und Geräten sowie nicht in allen Kameras korrekt implementiert.
Das erklärt, warum wir WebRTC noch nicht als Standard-Player für alle Nutzer festgelegt haben.
Derzeit empfehlen wir die Nutzung von WebRTC nur in Google Chrome. Die neuesten Versionen von Firefox und Safari unterstützen diese Technologie ebenfalls, jedoch leider noch instabil.
Wir haben momentan keine Unterstützung für WebRTC in mobilen Browsern integriert. Wenn Sie mit einem mobilen Gerät auf unsere Seite zugreifen und WebRTC aktivieren, wird dieser Modus nicht funktionieren. Allerdings ist WebRTC in unseren mobilen Anwendungen für und .
Abschließend möchten wir noch zwei weitere feine Punkte zur Umsetzung von WebRTC in unserem Service anmerken.
Erstens ist die Technologie darauf ausgerichtet, insbesondere Live-Video in Echtzeit zu streamen. Wenn die Bandbreite Ihres Anschlusses also nicht ausreicht, um das Video zu übertragen, werden Sie Frame-Drops bemerken (mit HLS werden Sie Videoeinfrorungen und eine erhöhte Verzögerung feststellen, wobei jedoch keine Frames verloren gehen). Das Video wird dennoch in Echtzeit gestreamt.
Zweitens verwenden wir die Technologie aufgrund ihrer Ausrichtung auf Live-Video in Echtzeit nicht für die Verarbeitung von Archivvideos.
Weitere Änderungen am Dienst
Momentan spielt Flash keine Rolle mehr im Mechanismus zur automatischen Auswahl des Players. Sie können weiterhin auf solch einen Player zugreifen, müssen ihn jedoch manuell in den Kontoeinstellungen oder in der Kamera auswählen. Das ist kein Trend, sondern ergibt sich aus der Statistik unserer Nutzer, nach der kaum noch Nutzer mit Flash arbeiten. Und beim Versuch, zu bestimmen, ob der Browser des Nutzers Flash unterstützt, verlieren wir etwa 2 Sekunden unserer wertvollen Zeit.
Hier sind die wichtigsten Änderungen, die Sie in unserem Cloud-Videobewachungssystem und Ihrem persönlichen Bereich erwarten können. Bleiben Sie dran und verfolgen Sie unsere Neuigkeiten!
Quelle: habr.com
