Progressive Streaming-Technologie oder das Ansehen von 4k-Videos über das Netzwerk ohne Friese



Heutzutage kann man niemanden mit der Geschwindigkeit des Internets von 100 Mbit / s überraschen, aber es gibt ein Problem, wie man es benutzt. Alle grundlegenden Vorgänge laden das Netzwerk nicht vollständig. Gleichzeitig sind die schweren 4k-8k-Audio- und -Videoformate, die Sie online ansehen möchten, beliebter. Angesichts der hohen Geschwindigkeit des Internets stellt sich eine logische Frage: Warum nicht? Wie beherrsche ich die vom Anbieter bereitgestellte volle Geschwindigkeit? Sowohl auf der Client-Seite als auch auf der Service-Seite. Berücksichtigen Sie alle diese Punkte im Artikel.

Ich habe ein wirklich gutes Softwareprodukt gemacht und möchte genauer erzählen, wie dort alles angeordnet ist. Es gibt viele neue Technologien. Vielleicht, weil seit langer Zeit niemand mehr etwas in dieser Branche erfunden hat und die Zeit gekommen ist. Dieser Artikel richtet sich nicht nur an Entwickler, sondern auch an normale Menschen. Ich habe versucht, alles so einfach wie möglich zu erklären.

1. Beginnen wir mit den grundlegenden Grundlagen der heutigen Datenübertragungstechnologien.
Es gibt eine große Wissenslücke vieler Menschen über Hochgeschwindigkeits-Datenübertragungsalgorithmen - mehr als 10 Mbit / s ... Lassen Sie uns diese Lücken füllen:

Raum # 1. Das Problem ist, dass sich die Gesamtheit der Funkübertragungstechnologien jetzt auf die kontinuierliche Datenübertragung als bestes Szenario konzentriert.

Alles, was über Wi-Fi \ 3G \ 4G und sogar per Kabel übertragen wird, wird am schnellsten übertragen, wenn die Übertragung konstant ist, selbst bei einer niedrigeren Geschwindigkeit als dem Maximum. Dies ist viel schneller als das intermittierende Senden, jedoch mit maximaler Geschwindigkeit.

Gründe:

  • Um die Kommunikation fortzusetzen, werden dem Verkehr weitere Dienstinformationen hinzugefügt.
  • Wenn die Kommunikation wieder aufgenommen wird, kann der Server die Client-Bewertung senken und Daten mit einer geringeren Geschwindigkeit (möglicherweise aufgrund des Auftretens anderer Clients) oder überhaupt nicht bereitstellen. Selbst in einem WLAN-Heimnetzwerk kann der Router die Bewertung beispielsweise aufgrund eines WLAN-Staubsaugers senken. Das heißt, Dies gilt für alle Netzwerke, in denen mehr als 2 Clients vorhanden sind. Im Allgemeinen fast an alle :-)

Raum # 2. Beim Kopieren von Daten verwendet jedes Programm eine Art „Bucket“, der Daten aus der Quelle zieht und an das Ziel überträgt. Daher muss dieser Bucket je nach Datenübertragungsrate unterschiedlich groß sein . Es ist leicht zu verstehen: Wenn Sie einen Eimer Wasser mit einem Teelöffel schöpfen, dauert es viel länger als das Schöpfen eines Bechers.

Raum # 3. Um das Herunterladen von Daten über das Netzwerk zu beschleunigen, sollte RAM verwendet werden. Kleinste Millisekunden Verzögerung bei der Aufzeichnung eingehender Daten werden dann in Sekunden, Minuten und Stunden eingegeben. Um dies zu verhindern, müssen Sie zuerst Daten in den Arbeitsspeicher und dann in einen umfangreicheren „Bucket“ auf einem permanenten Medium (Festplatte) schreiben. Andernfalls sinkt die Datenübertragungsgeschwindigkeit drastisch.

Dies reicht aus, um nur die Datei zu kopieren.

2. Diese Lücken sind nur die Spitze des Eisbergs. Bei normaler Dateiübertragung ist dies ausreichend, aber was ist, wenn unsere Datei multimedial ist und wir sie online abspielen müssen? Eine moderne Multimediadatei kann nicht vollständig in den Arbeitsspeicher passen. Sie müssen sie daher auf der Festplatte speichern.

Die beste Strategie basiert auf dem oben Gesagten über Räume:

  • Das Laden der Daten sollte unabhängig von der Wiedergabe kontinuierlich erfolgen.
  • Um ein Zurückspulen zu gewährleisten, muss ein weiterer Datenstrom zum Laden erstellt werden.
  • Um den Fries beim Start aufgrund des Empfangs technischer Daten (Codecs usw.) zu überwinden, ist ein Vorladen erforderlich. Empirisch fand ich die Formel: Die Größe der gesamten Datei beträgt * 0,002 oder 0,2%.

Dies reicht aus, um Flac-Dateien abzuspielen.

3. Es stellt sich heraus, dass für Online-Streaming, das unseren Kommunikationskanal rational und vollständig nutzt, RAM und Speicherplatz benötigt werden. Ohne dies wird der Kanal nicht vollständig genutzt.

Und hier beginnt die Verzweigung von Datenladealgorithmen! Ohne technische Details werde ich sie in einem ungefähren Umfang geben:

  • Damit die Daten nicht zweimal heruntergeladen werden können, müssen Streams kollidiert werden. Das heißt, Wenn wir den Track gestartet und schnell in die Mitte zurückgespult haben, sollte der erste Stream, der die Mitte erreicht, seine Arbeit unterbrechen.
  • Damit Daten nicht zweimal heruntergeladen werden, sollte kein Stream erstellt werden, wenn die Daten bereits geladen sind.
  • Für die normale Wiedergabe ist eine komplexe Logik der Interaktion zwischen dem Player-Stream und den Streams, die Daten herunterladen, erforderlich.

Ich habe das alles und noch ein bisschen mehr gemacht. Es stellte sich als absolut fabelhaft heraus. Daten fliegen und die Wiedergabe wird nicht unterbrochen. Flac-Dateien wurden nach 1-3 Sekunden Wiedergabe vollständig heruntergeladen. Und das war genug, um Full HD-Videos abzuspielen.

4. Das Problem ist, dass unsere Mediendateien sehr unterschiedlich groß sind. Und mit 4k Blu-ray-Filmen, die etwa 80-120 GB wiegen, hat nichts funktioniert. Der Spieler hat zu Beginn 15 Threads erstellt und alle haben die Geschwindigkeit geteilt, was natürlich nicht für den Haupt-Thread ausreichte, auf den der Spieler gewartet hat. Die Daten wurden mit maximaler Geschwindigkeit geladen, ja ... sie haben den gesamten Kanal heruntergeladen, aber 4k-Videos hingen und wurden langsamer als die Diashow abgespielt. Es stellt sich heraus, dass viele Streams für 4k-Videos schädlich sind, aber wo ist die Grenze, nach der die Vorteile in Full HD in 4k zu Schaden wurden?!

Infolgedessen beruhte alles auf der Geschwindigkeit des Kanals. Um Threads zu optimieren, müssen Sie zwei Dinge wissen:

a) Die für die Wiedergabe erforderliche Geschwindigkeit, die berechnet wird: (Dateigröße / Dauer in Sekunden) * 8.

b) Die Geschwindigkeit des Datenladens durch den Hauptstrom, mit dem der Player gerade arbeitet.

Wenn wir das Laden von Daten verwalten, haben wir definitiv die Möglichkeit, die Download-Geschwindigkeit zu messen. Jetzt kannte jeder Thread seine Geschwindigkeit (in Mbit / s) und dies verursacht keine zusätzlichen Kosten für die Leistung. Stellen Sie sicher, dass Sie feststellen, an welchem ​​Stream der Player gerade arbeitet. Alles beginnt im üblichen Multithread-Modus. Sobald der Player jedoch die Dauer der Mediendatei in Sekunden berechnet und diese Daten überträgt, erhalten alle Streams eine feste, für die Wiedergabe erforderliche Geschwindigkeit. Unmittelbar danach vergleichen alle Flüsse (außer dem Hauptstrom) die erforderliche Geschwindigkeit mit der Geschwindigkeit des Hauptstroms. Wenn seine Geschwindigkeit niedriger ist, halten sie an. Außerdem baut der Haupt-Thread langsam seine Geschwindigkeit auf, und sobald er die erforderliche Geschwindigkeit zweimal überschreitet (wie ich es getan habe), pausiert er alle sekundären Flüsse ab Pause.

Beobachtungen zufolge sinkt dann nach einiger Zeit die Geschwindigkeit des Hauptstroms wieder und alle Nebenströme werden wieder angehalten, bis die Daten heruntergeladen oder die Wiedergabe abgeschlossen ist. Eine solche flexible Strategie lädt den Kommunikationskanal vollständig herunter und gewährleistet gleichzeitig den schnellstmöglichen Download der für die Datenwiedergabe erforderlichen Daten, wenn das Laden von Daten parallelisiert und erforderlichenfalls zu einem Stream komprimiert wird. Diese Strategie funktioniert sowohl bei 10-MB- als auch bei 100-GB-Dateien gleich gut. Um verlustfrei über das Netzwerk zu spielen, ist es unmöglich, sich etwas Besseres auszudenken. Wenn Sie Vorschläge haben, werde ich diese gerne in den Kommentaren diskutieren.

Geeignet für die Wiedergabe von Mediendateien mit einem beliebigen Volumen von 4 bis 8 KB.

Progressives Streaming ist die schnellste Art des Streamings, wenn Daten in ihrer ursprünglichen Qualität übertragen werden. Um die Datenübertragungsrate zu erhöhen, werden RAM und Multithreading verwendet. Daten werden asynchron in den Wiedergabestream geladen, jedoch mit aktiver Interaktion. Während der Wiedergabe wird die Geschwindigkeit der Datenerfassung gemessen und die Anzahl der aktiven Streams an den verfügbaren Datenkanal angepasst.
Derzeit besteht weltweit eine große Tendenz, die Anzahl hochauflösender Videos zu erhöhen, und die Beliebtheit von Geräten zum Abspielen nimmt zu.


Quelle www.vox.com

Bitrate 4k Video ist groß, aber nicht himmelhoch. Der effizienteste VP9-Codec komprimiert heute 4k-Videos mit 15 Mbit / s. mit Audio kommt ca. 15.5 heraus. Ein 100-GB-Blu-ray-Film hat eine Bitrate von etwa 60 Mbit / s ... Jeder auf der Welt, der 4k-Videos ansehen möchte, hat diese Internetgeschwindigkeit. Dies bedeutet, dass 4k-Videos jetzt online angesehen werden können!

Trotz der Einfachheit des oben beschriebenen Algorithmus sieht die Implementierung sehr kompliziert aus. Streaming-Technologien mit einer Verschlechterung der Video- und Audioqualität sind gezwungen, Inhalte zu verderben, da der richtige Datenübertragungsalgorithmus nicht implementiert ist. Ich gehe davon aus, dass viele Menschen und Unternehmen (oben) Wissenslücken und natürlich Schwierigkeiten bei der Implementierung dieses Algorithmus haben. Daher schrieb er einen Artikel, um das Verständnis dieser Streaming-Methode zu vereinfachen.

Es wird etwas schwieriger sein, diesen Algorithmus mit dem Urheberrecht zu erstellen, aber im Allgemeinen ist es auch möglich. Beim Speichern auf der Festplatte und beim Lesen müssen Daten verschlüsselt werden. Es sieht aus wie eine feindliche Aktion gegen den Benutzer, aber was zu tun ist. Einige Unternehmen tun dies.

Betrachten wir nun die Nachteile des herkömmlichen Streamings im Vergleich zum progressiven:

  • Es ist unmöglich, die nächste Datei vorzuladen, um die nächste Aktion vorherzusagen und vorzubereiten.
  • Selbst bei einer vorübergehenden Unterbrechung des Internets / Geschwindigkeitsunterbrechungen tritt ein merklicher Fries von Ton / Bild auf.
  • Der Kommunikationskanal ist nicht vollständig ausgelastet, und die Hälfte der Wiedergabezeit ist inaktiv, wenn noch viele Daten geladen werden müssen.
  • die Unfähigkeit, 4k-8k-Videos auch über WLAN ohne Friese abzuspielen. Ständige Kommunikationsböen und Geschwindigkeitssprünge bis zum Maximum können es nicht ertragen, selbst das WLAN zu Hause während des gesamten Films beträgt 2 Stunden oder mehr.
  • Dies bedeutet eine noch größere Belastung beim Abspielen von 4k-Inhalten, da der Player zwischen 200 und 300 MB Videodaten (mit der erforderlichen Geschwindigkeit von 60 Mbit / s) im RAM halten muss. Bei der Wiedergabe über einen progressiven Streaming-Algorithmus ist dies nicht mehr erforderlich, da die Wiedergabe von einer Festplatte und nicht über ein Netzwerk erfolgt.

Nach diesen Punkten ist klar, was nach wie vor nicht mehr zu streamen ist. Natürlich können Sie die Geschwindigkeit \ Speicher \ Cache zehnmal erhöhen, aber warum, wenn die heutigen Geschwindigkeiten bereits ausreichen und das Problem in den Algorithmen liegt. Schlechte Algorithmen kommen früher oder später zum Stillstand. Progressive Streaming ist heute die einzige Technologie, mit der Sie 4k 100 Gigabyte-Filme stabil und bequem online ansehen können.

Als Beispiel für die Funktionsweise der Technologie habe ich eine Multimedia-Anwendung geschrieben - den Media Library Player. Es unterstützt alle Formate. Um die Funktionen zu demonstrieren, die Sie zum Ausführen benötigen. Öffnen Sie die Demo-Site und wechseln Sie in den Verzeichnisbaum "Filme (TOP) / 4k-Filme". Dort können Sie einen beliebigen Film auswählen und ansehen. Um alle Formate zu unterstützen, sollten Sie das Player-Modul von ExoPlayer auf VlcPlayer umstellen.
In diesem Szenario werden alle oben genannten Datenerfassungsalgorithmen verwendet. Meine Anwendung unterstützt die folgenden Protokolle: nmdc \ http \ ftp \ samba sowie die Mega.nz-Cloud.

4k-Videodateien mit einem Gewicht von 100 GB werden mit minimalen Verzögerungen abgespielt und mit der höchstmöglichen Geschwindigkeit in den Speicher heruntergeladen. Sie können weitere Daten vorab laden, indem Sie einfach pausieren. Dies ist jedoch normalerweise nicht erforderlich. Die Wiedergabe ist immer stabil, wenn nicht stabil, liegt die Kanalgeschwindigkeit nahe der für die Wiedergabe erforderlichen Geschwindigkeit.

Aufgrund der oben beschriebenen Lücken entwickeln sich die Richtlinien der größten Unternehmen nicht richtig, was den Fortschritt verlangsamt und häufig die vollständige Nutzung verfügbarer Geräte und Kommunikationskanäle verhindert.

Die Anwendung ermöglicht das Speichern des Caches auf externen Medien. Aufgrund der merkwürdigen Komplikationen beim Zugriff auf externe Medien von Google wird sie derzeit hauptsächlich von Samsung-Geräten und Android-Version 5.0+ unterstützt. In Zukunft wird die volle Unterstützung für externe USB-Medien angezeigt.

Im Allgemeinen verbessert der Algorithmus die Qualität und Geschwindigkeit des Herunterladens von Daten beim Streaming erheblich, sowohl bei kleinen Dateien mit 30 bis 50 MB als auch bei großen Dateien mit 50 bis 120 GB.

In der Perspektive kann es verwendet werden:

  • für die qualitativ hochwertige Wiedergabe von 4k-8k-Medieninhalten auf Mobiltelefonen, Fernsehgeräten und anderen Geräten;
  • in der virtuellen Realität zur Anzeige volumetrischer Szenen in hoher Auflösung;
  • in Kombination mit Torrent-ähnlichen Peer-to-Peer-Protokollen;
  • für hochwertige Musikwiedergabe in hoher Auflösung auf jedem Gerät. Experimentelle Tests haben gezeigt, dass 2 Mbit / s eines instabilen Kommunikationskanals dafür ausreichen.

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


All Articles