
Seit den ersten Arbeitstagen an dem cloudbasierten Videoüberwachungssystem standen wir vor einem Problem, dessen Lösung entscheidend für das Überleben von Ivideon war – es war unser Everest, dessen Besteigung enorme Kräfte kostete, aber jetzt haben wir endlich den Eispickel in den Gipfel des plattformübergreifenden Rätsels gestochen.
Das System zur Übertragung von Audio und Video über das Internet sollte nicht von Hardware, Web-Clients und den von ihnen unterstützten Standards abhängen und muss auch bei Vorhandensein von Network Address Translators und Firewalls ordnungsgemäß funktionieren. Der Benutzer der cloudbasierten Videoüberwachung möchte Zugang zum Dienst erhalten, selbst wenn er analoge Kameras verwendet und die Live-Videoübertragung auf einem modernen Gerät ansehen möchte.
Es ist äußerst wichtig, dass der Benutzer das Video mit minimaler Verzögerung ansehen möchte. Die praktisch einzige Möglichkeit, Video mit niedriger Verzögerung im Browser anzuzeigen, ist die Verwendung von WebRTC (Web Real-Time Communications). WebRTC ist ein Satz von Technologien für die Peer-to-Peer-Übertragung von Video und Audio in Browsern, die ursprünglich für die Übertragung und Wiedergabe von Videoströmen mit niedriger Verzögerung entwickelt wurden. Dazu wird unter anderem das UDP-Protokoll verwendet.
Bevor wir Ihnen erläutern, was der neue Motor dem Benutzer bietet, erinnern wir an den Grund, warum wir HLS-Technologien unterstützen und weshalb wir beschlossen haben, weiterzumachen.
HLS-Motor: Vor- und Nachteile

()
Die HLS-Technologie (HTTP Live Streaming) wurde von Apple entwickelt, daher ist es nicht überraschend, dass die Unterstützung erstmals auf Geräten dieser Marke verfügbar war. Heutzutage können fast alle Fernsehgeräte und viele Geräte mit Android-Betriebssystem HLS-Videos abspielen.
Der HLS-Motor verwendet für die Streaming-Übertragung von Videodaten den bekannten Video-Codec H264 in Kombination mit AAC- oder MP3-Audiostreams. Der gesamte Audio- und Video-Datenstrom wird in einen MPEG-TS-Transportbehälter verpackt. Für die Übertragung über das HTTP-Protokoll wird die im Stream enthaltene Information in Fragmente unterteilt, die in m3u8-Playlisten beschrieben werden. Nur dann werden diese Fragmente zusammen mit den Playlisten über HTTP übertragen. Die Aufteilung in Fragmente bedeutet automatisch eine Verzögerung in Sekunden. Dieses Merkmal des MPEG-TS-Containers.
Der HLS-Motor unterstützt auch 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 einem CDN geladen werden können.
Trotz der Einfachheit des Engines läuft nicht alles so glatt, wie es scheint. Das Hauptproblem ist, dass Entwickler von Drittanbieter-Playern von den Empfehlungen von Apple abgewichen sind, insbesondere in Bezug auf unterstützte Audioformate. Insbesondere haben viele Entwickler begonnen, die Möglichkeit zu integrieren, mit gängigen Audio-Streams zu arbeiten: mpeg2 Video, mpeg2 Audio usw. Infolgedessen mussten verschiedene Playlist-Formate für verschiedene Player erstellt werden.
Aber eines der größten Probleme des HLS-Engines ist die hohe Latenz bei der Datenübertragung.
Ursprünge der Verzögerungen
Der Hauptgrund für die hohe Latenz bei HLS liegt darin, dass Programmierer die Engine für die Erzielung maximaler Bildqualität entwickelt haben. Daher sind die Parameter des verwendeten Intervallrahmens und das Volumen des Wiedergabepuffers einfach nicht geeignet für Live-Videoübertragungen. Dies führt zu einer relativ hohen Verzögerung bei der Übertragung des Videostreams, die 5-7 Sekunden betragen kann.
Einerseits ist das wenig, beispielsweise für diejenigen, die einen Film von einem Video-Hosting-Server anschauen. Aber für Überwachungssysteme kann die Verzögerung bei der Übertragung des Videostreams von großer Bedeutung sein.
Wenn Sie ein Büro überwachen, in dem Mitarbeiter sich einmal pro Stunde von den Monitoren abwenden, zählt die Verzögerung von 5 Sekunden nicht. Aber die Menschen begannen sich zu beschweren, dass zum Beispiel beim Übertragen eines Fußballspiels im Chat bereits GOOOOOL geschrieben wurde, das Video dies aber noch nicht zeigt :). Wir haben bereits eine Reihe von Benutzerfällen, in denen Ivideon Skype praktisch ersetzen muss.
Kann man die Latenz bei HLS überwinden? Die Antwort auf diese Frage klingt wie die Rede eines erfahrenen Rattenfängers bei einer Vorlesung vor angehenden Schädlingsbekämpfern: „Ratten kann man nicht ausrotten, aber ihre Anzahl kann auf ein vernünftiges Minimum reduziert werden.“ So ist es auch mit der Latenz bei HLS, sie auf null zu bringen, ist nicht möglich, aber es gibt Lösungen auf dem Markt, die die Latenz erheblich reduzieren können.
Kleine Segmentierung
Ein weiteres Problem der Engine ist die Verwendung von kleinen Dateien zur Datenübertragung. Es scheint, als wäre daran nichts Schlechtes?
Jeder, der versucht hat, eine große Anzahl kleiner Dateien von einem Datenträger auf einen anderen zu kopieren, hat sicherlich bemerkt, dass die Schreibgeschwindigkeit eines solchen Sets deutlich niedriger ist als die eines großen Files mit demselben Volumen. Zudem erhöht sich die Intensität der Zugriffe auf die Festplatte erheblich, was sich insgesamt negativ auf die Leistung des Computers auswirkt. Daher trägt die Übertragung von Videodaten in Form kleiner 10-Sekunden-Fragmente ebenfalls zur erhöhten Verzögerung des Engines bei.
Fassen wir die Vor- und Nachteile der HLS-Technologie kurz zusammen.
Vorteile von HLS:
- Kompatibilität mit allen 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 moderne Version ist und mit HTML5 und Media Source Extensions kompatibel ist.
- Hervorragende Bildqualität. Die verwendete Funktion zur adaptiven Datenübertragung ermöglicht es, die Qualität des übertragenen Videoinhalts dynamisch in Abhängigkeit von der Bandbreite der Internetverbindung zu ändern, wobei der Algorithmus bestrebt ist, die Qualität maximal zu erhalten.
- Keine Notwendigkeit für komplizierte Benutzereinstellungen.
Nachteile:
- Eingeschränkte Unterstützung der Engine auf einigen Geräten.
- Hohe Verzögerungen bei der Bildübertragung.
- Stark erhöhte Overheadkosten und schwierige Optimierung aufgrund der Verwendung kleiner Dateien. Aufgrund der Eigenschaften des Containers werden wir niemals eine Verzögerung von weniger als der Segmentgröße erreichen können.
Die Nachteile von HLS haben für uns ü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 zwischen Browsern und mobilen Anwendungen mit minimaler Verzögerung zu übertragen. Hierfü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 ein Technologiesatz für die Peer-to-Peer-Übertragung von Video und Audio. Das bedeutet, dass beispielsweise Benutzersbrowser mit Hilfe von WebRTC Daten direkt untereinander austauschen können, ohne entfernte Server zur Speicherung und Verarbeitung der Daten zu verwenden. Alle Informationen werden ebenfalls von den Browsern und mobilen Anwendungen der Endbenutzer verarbeitet.
Die Benutzerfreundlichkeit und die umfangreichen Möglichkeiten dieser Technologie haben die Entwickler aller gängigen Browser überzeugt. Heute wird WebRTC in Mozilla Firefox, Opera, Google Chrome (und in allen auf Chromium basierenden Browsern) sowie in mobilen Anwendungen für Android und iOS unterstützt.
Trotz ihrer unbestreitbaren Vorteile hat WebRTC einige wesentliche Nachteile.
Schwierigkeiten bei der Auswahl
Die WebRTC-Technologie ist aufgrund ihrer P2P-Natur viel komplexer im Hinblick auf Netzinteraktionen. Sie ist schwer zu debuggen und zu testen und kann sich unvorhersehbar verhalten. Gleichzeitig müssen wir NAT und Firewalls überwinden und sicherstellen, dass sie in Netzwerken funktioniert, in denen UDP blockiert ist.
Es ist sehr schwierig, die WebRTC-Implementierung von Google zu verwenden. Es gibt sogar ein ganzes Unternehmen, das Dienstleistungen zur Zusammenstellung von SDKs anbietet. Außerdem war es sehr schwierig, die Implementierung von Google in unser System zu integrieren, ohne dabei das gesamte Video neu zu kodieren.
Wir wollten unseren Benutzern schon lange die Möglichkeit geben, mit echtem "Live"-Videomaterial zu arbeiten und die Verzögerung des Bildes auf dem Bildschirm im Verhältnis zu den Ereignissen zu minimieren. Außerdem wollten wir die Nutzung von PTZ-Kameras komfortabler gestalten, wo Verzögerungen von entscheidender Bedeutung sind.
Angesichts der Tatsache, dass andere Implementierungen zur Bekämpfung von Lags derzeit eingeschränkte Funktionen haben und erheblich schlechter funktionieren, haben wir uns entschieden, WebRTC zu nutzen.
Was wir getan haben

Die Plattform WebRTC sinnvoll zu implementieren, ist eine schwierige Aufgabe. Jeder Fehler oder jede Ungenauigkeit kann dazu führen, dass die Verzögerungen bei der Übertragung des Videostreams nicht nur im Vergleich zu anderen Plattformen nicht verringert, sondern sogar erhöht werden.
Für das ordnungsgemäße Funktionieren von WebRTC ist es in erster Linie erforderlich, den technologischen Stack für die Verarbeitung von Webvideos zu modernisieren. Das haben wir auch getan.
Zunächst haben wir einen WebRTC-Signalprotokollserver über Websocket implementiert und einen WebRTC-Peer-Server in der Cloud basierend auf dem SDK webrtc.org eingerichtet. Seine Aufgabe ist es, Videostreams an die Client-WebRTC-Peers im H.264 + Opus/G.711-Format ohne Video-Rekodierung auszugeben.
Wir haben Websocket als Signalprotokoll gewählt, weil es bereits qualitativ hochwertige Unterstützung in allen gängigen Webbrowsern bietet. Dadurch können sowohl die Entwicklungskosten erheblich gesenkt als auch Zeit und Ressourcen für wiederholte TCP- und TLS-Handshake im Vergleich zu AJAX eingespart werden.
Das Problem ist, dass WebRTC standardmäßig kein Signalprotokoll bereitstellt, das für die korrekte Einrichtung, Unterstützung und Beendigung von Echtzeit-Videokommunikation zwischen Quell- und Client-Anwendungen erforderlich ist.
Um die Signaltechnologie selbst zu implementieren, mussten wir unseren eigenen Signalsserver mit Unterstützung für mehrere Webprotokolle (Websocket, WebRTC) entwickeln. Außerdem sollte er die sichere Verwaltung von Sitzungen und Benachrichtigungen in Echtzeit, die Verwaltung von Videos und viele andere Parameter ermöglichen.
Wir haben die P2P-Einschränkungen überwunden, indem wir die Latenz nicht durch P2P, sondern durch UDP und ein auf die Verringerung der Latenz ausgelegtes Flussmanagement verringert haben. Dies ist ebenfalls in WebRTC enthalten, da der Hauptanwendungsfall P2P-Gespräche über den Browser sind.
In der mobilen App haben wir einen Player mit dem SDK webrtc.org implementiert, da dort das Stream-Management korrekt umgesetzt ist, alle gängigen Forward Error Correction (FEC)-Schemata verfügbar sind und der Mechanismus für die erneute Paketübertragung für alle Browser richtig implementiert ist. Ein weiterer wichtiger Punkt ist, dass das SDK webrtc.org aktiv von Google weiterentwickelt wird.
Was ist das Ergebnis der Einführung von WebRTC?
Für die Anzeige von Live-Videos von Kameras haben wir im Benutzerkonto einen neuen optimierten Player basierend auf WebRTC hinzugefügt. Er sorgt für eine hohe Video-Ladegeschwindigkeit und beseitigt vollständig das Problem der Verzögerungsakkumulation mit zunehmender Betrachtungsdauer.
Nach der Einführung der WebRTC-Unterstützung im Cloud-Service Ivideon können wir mit voller Überzeugung sagen, dass unseren Kunden jetzt der Zugriff auf hochwertiges Live-Video ermöglicht wird. Derzeit beträgt die Verzögerung bei der Übertragung des Videostreams nicht mehr als eine Sekunde! Zum Vergleich: Der frühere HLS-Engine lieferte Video mit einer Verzögerung von 5-7 Sekunden. Der Unterschied in der Geschwindigkeit der Videoanzeige ist enorm, und der Benutzer wird dies sofort nach dem Start der Nutzung unseres Video-Services bemerken.
Wie wir bereits vermuteten, hat die Implementierung des neuen Players die Reaktionsfähigkeit von PTZ und der Sprachverbindung mit der Kamera verbessert.

Es gibt nur einen kleinen Punkt, auf den wir hinweisen möchten. Der neue WebRTC-Player funktioniert bisher im Testmodus. Daher aktivieren wir ihn nicht standardmäßig für alle unsere Kunden. Aber Sie können ihn selbst aktivieren, indem Sie die entsprechende Option in den Kameraeinstellungen einschalten (dazu müssen Sie in ).
Besonderheiten der WebRTC-Implementierung im Ivideon-Service

WebRTC ist derzeit noch eine experimentelle Technologie. Ihre Unterstützung ist derzeit nicht in allen Browsern und auf allen Benutzungsgeräten sowie nicht in allen Kameras korrekt implementiert.
Daher erklären wir, dass wir den WebRTC-Player bisher nicht als Standardplayer für alle Benutzer festgelegt haben.
Derzeit empfehlen wir die Nutzung von WebRTC ausschließlich in Google Chrome. Die neuesten Versionen von Firefox und Safari unterstützen diese Technologie ebenfalls, sind jedoch leider noch instabil.
Wir haben die WebRTC-Unterstützung für Browser auf mobilen Geräten noch nicht implementiert. Wenn Sie derzeit von einem mobilen Gerät aus auf WebRTC zugreifen und es aktivieren, wird dieser Modus nicht funktionieren. Allerdings ist WebRTC in unseren mobilen Anwendungen für und .
Und zum Abschluss unserer Erzählung über die Besonderheiten der WebRTC-Implementierung in unserem Service möchten wir noch zwei kleine Punkte erwähnen.
Erstens ist die Technologie darauf ausgerichtet, genau Live-Video in Echtzeit zu übertragen. Daher werden Sie, wenn die Bandbreite Ihres Kanals nicht ausreicht, um das Videomaterial zu übertragen, Frameaussetzer bemerken (bei HLS bemerken Sie Videoeinfrieren und eine längere Verzögerung, während keine Frames ausfallen), aber das Video wird trotzdem in Echtzeit übertragen.
Zweitens, da die Technologie speziell für die Arbeit mit lebendigem Video in Echtzeit entwickelt wurde, verwenden wir sie nicht für die Arbeit mit archivierten Videodaten.
Weitere Änderungen im Service
Momentan spielt Flash keine Rolle mehr im automatischen Engine-Auswahlmechanismus. Man kann jedoch weiterhin einen solchen Player verwenden, muss ihn dafür aber manuell in den Kontoeinstellungen oder der Kamera auswählen. Dies ist kein Trend, sondern einfach aufgrund der Statistik unseres Services bleibt praktisch kein Benutzer mehr, der mit Flash arbeitet. Und beim Versuch zu bestimmen, ob der Browser des Nutzers dies unterstützt, verlieren wir etwa 2 kostbare Sekunden.
Hier sind kurz die Änderungen, die Sie in unserem Cloud-Überwachungssystem und im persönlichen Bereich erwarten können. Bleiben Sie bei uns und verfolgen Sie die Neuigkeiten!
Quelle: habr.com
