Ist der progressive HTTP-Download eine praktikable Alternative zu HLS / DASH / RTMP für die Bereitstellung von Live-Videos?

16

Ich arbeite an einer Website, die Live-Videos für Benutzer streamen muss, und als solche musste ich mich mit dem traurigen Zustand der aktuellen browserbasierten Video-Streaming-Technologie auseinandersetzen. Die derzeit beliebtesten Lösungen für das Live-Streaming weisen Kompatibilitätsprobleme auf. RTMP erfordert Flash, HLS wird nur von Safari und Chrome für Android nativ unterstützt , DASH wird nirgendwo nativ unterstützt, und für die Verwendung von dash.js sind Media Source Extensions erforderlich , die noch nicht in großem Umfang unterstützt werden.

Dies führt zu einer für mich offensichtlichen Frage: Ist es möglich, einfachen progressiven Download als Alternative zu Protokollen wie HLS, RTMP und DASH zu verwenden, für die entweder Browserunterstützung oder Plugins erforderlich sind?

Die Idee, progressive Downloads zum Streamen von Live-Medien zu verwenden, ist nicht unerreicht. Leute machen es schon für Audio. Mit Tools wie liveCaster können Sie Live-MP3-Audio über eine einzige progressive HTTP-Antwort streamen, ohne eine zuvor aufgezeichnete MP3-Datei zu benötigen. Bibliotheken wie AmplitudeJS haben sich alle Mühe gegeben, Funktionen für diese Art von Live-Audio-Streaming hinzuzufügen .

Ich habe jedoch keine Beispiele für diese Technik gesehen, die in der Natur für Videos verwendet wurde, und ich kann nicht sagen, warum. Es sieht so aus, als würde es eine Schicht von unordentlichen und schwierigen Kompatibilitätsproblemen auf der Browserseite für relativ wenig Kompromiss beseitigen. (Und die Kompatibilität ist immer noch ein großes Problem beim Live-Streaming, selbst wenn die Profis es tun. Wenn ich versuche, ein Live-Video auf dem iPlayer von BBC in Firefox anzusehen, erhalte ich nur eine Fehlermeldung, in der ich aufgefordert werde, Flash zu installieren.) Diese Technik, und ich habe noch nie jemanden gesehen, der diese Idee außer mir erwähnte .

Warum? Gibt es eine grundlegende Einschränkung, die es unmöglich macht, eine Videodatei wie eine MP4-Datei beim Generieren über einen progressiven Download zu streamen und beim Herunterladen in einem <video>Element abzuspielen ?

Mark Amery
quelle
Könnten Sie keine HLS-Javascript-Bibliothek verwenden (z. B. hls.js hier: github.com/video-dev/hls.js/tree/master ), um browserübergreifende HLS-Unterstützung für Ihre Seite hinzuzufügen? Ich denke, das gab es vielleicht nicht, als Sie diese Frage ursprünglich gestellt haben ... aber jetzt. :)
stuckj

Antworten:

3

Ihre Frage ist gültig und theoretisch ich glaube , Sie können verwenden Progressive Downloads für Live - Video - Streaming. Tatsächlich verwenden viele Online-Streaming-Videos wie YouTube usw. bereits HTTP. Ich gehe davon aus, dass Sie ausschließlich über LIVE- Streaming und nicht nur über Streaming sprechen .

Sie müssen die Live-Streaming-Anwendungsfälle jedoch selbst implementieren! Was sonst die Streaming-Protokolle (RTMP etc.) selbst machen. Hier sind einige Gründe, diese Protokolle und Architekturen zu bevorzugen:

1. Variable Bitrate

Die meisten Live-Streaming-Videos sind in VBR codiert und Ihr Video muss sich schnell an die sich ändernde Netzwerküberlastung Ihres Clients anpassen. So kann Ihr Video in sehr kurzer Zeit mehrere Auflösungen wechseln, je nachdem, wie schnell oder langsam die Client-Verbindung ist.

Laut Wikipedia

Dabei werden die Bandbreite und die CPU-Kapazität eines Benutzers in Echtzeit ermittelt und die Qualität eines Videostreams entsprechend angepasst

2. Live-Inhalte

Der wichtigste Punkt ist, dass Live-Streaming Live- Inhalte bedeutet . Im Gegensatz zum progressiven HTTP-Download können Sie zu keinem Zeitpunkt puffern. Der Benutzer muss den neuesten Frame sehen, der für die ganze Welt bestimmt ist, und darf nicht zurückbleiben.

3. Suche deaktivieren

Ein kleines Problem, aber das Protokoll sollte dem Benutzer ausdrücklich nicht erlauben, rückwärts (und offensichtlich vorwärts) zu suchen. Dies sollte nicht nur auf Video-Player-Ebene, sondern auch auf Netzwerkebene gesteuert werden.

4. Häufige Unterbrechungen / unzuverlässiges Netzwerk

Ich bin mir über diesen Punkt ein wenig unklar, aber ich weiß, dass es einige Zeit dauern kann, bis ein weiterer Handshake hergestellt wird, sobald der eingehende HTTP-Download getrennt wird (auch mit keep-alive). Live-Protokolle lassen sich aufgrund des nächsten Punkts viel schneller verbinden und trennen ->

5. Latenz

HTTP läuft von Natur aus über TCP, was eine garantierte Zustellung von Paketen gewährleistet. Vergleichen Sie dies mit UDP, das in vielen Protokollen (insbesondere Live-Multiplayer-Spielen) verwendet wird, bei denen Geschwindigkeit Vorrang vor Garantien hat.

Weitere Informationen finden Sie hier -> https://en.wikipedia.org/wiki/Streaming_media#Protocols

6. Kopieren von Inhalten

Die meisten Live-Stream-Server reagieren nur auf den Inhalt der aktuellen Uhrzeit. Obwohl es immer noch möglich ist, Inhalte von Live-Streams zu kopieren, muss auf Screenshots usw. zurückgegriffen werden. Wenn ein HTTP-Progressiv-Download durchgeführt wird, ist das Kopieren von Inhalten ziemlich trivial (daher gibt es so viele YouTube-Downloader).

Jetzt kann HTTP so modelliert werden , dass die meisten der oben genannten Funktionen zur Verfügung stehen.

Das von Ihnen erwähnte HTTP Live Streaming (HLS) von Apple kommt dem, was Sie erreichen möchten , am nächsten.

Und in diesem Bereich wird aktiv geforscht, wie hier angegeben -> http://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=65749&PageNum=2

Ich bin auf der Suche nach weiteren Informationen und werde diese Antwort aktualisieren.

Gaurav Ramanan
quelle
Es erscheint falsch, die Latenz als Nachteil der Verwendung des progressiven HTTP-Downloads zu erwähnen, da zu den Hauptkonkurrenten DASH und HLS gehören, die Videosegmente über mehrere aufeinanderfolgende HTTP-Anforderungen bereitstellen. Ich kenne nicht alle Details der Protokolle, aber ich würde annehmen, dass der letztgenannte Ansatz eine Mindestlatenz von mindestens der verwendeten Segmentlänge erfordert , wohingegen es beim progressiven Download-Ansatz keine theoretische Mindestlatenz gibt - niedrigere Latenz sollte sein eine Anzeige Vorteil des progressiven Download - Ansatz, nicht wahr?
Mark Amery
Einige der anderen Probleme, wie das Suchen und Wiederherstellen nach Verbindungsabbrüchen, betreffen ebenfalls eine JavaScript-Implementierung von DASH, aber dash.js überwindet sie vermutlich. Ich stelle mir vor, sie könnten für einen progressiven Download-Player überwunden werden, indem man einfach die Lösungen stiehlt, die die dash.js-Entwickler entwickelt haben.
Mark Amery
@ MarkAmery Wenn Sie mit DASH und HLS vergleichen, dann denke ich, dass es vergleichbar ist. Aber wenn Sie es mit einigen älteren Protokollen vergleichen, die über UDP laufen, verliert HTTP die Hände runter! Auch wenn heutzutage viele Echtzeitsysteme mit Websockets erstellt werden und HTTP aufgrund seiner Latenzprobleme vermieden wird.
Gaurav Ramanan
1
Das einfache Kopieren von Inhalten ist jedoch ein echter Nachteil gegenüber dash.js und HLS. Und ich bin mir nicht sicher, wie Streams mit variabler Bitrate mit progressivem Download implementiert werden könnten, obwohl ich davon ausgehe, dass dies mit ein wenig List möglich wäre.
Mark Amery
@MarkAmery Wenn es um Echtzeit- und Live-Streaming geht, müssen wir Leistung und nicht nur Möglichkeit berücksichtigen . Ich werde mich mit DASH befassen, aber ich frage mich, ob es Benchmarks gibt, die Leistungsvergleiche zwischen Streaming-Protokollen und HTTP-Wiederherstellung nach einer Unterbrechung zeigen.
Gaurav Ramanan