<< | Übersicht | >>

Stream-Up your life!



Nachfolgend findet sich der Prototyp meines Vortrags von der JavaLand 2016 zum Download. Damit dieser nicht unkommentiert für sich steht, habe ich noch ein paar zusätzliche Erklärungen hinzugefügt. Die Grafiken sind den Vortragsfolien entnommen, wobei die Erklärungen zu den verwendeten Technologien wie MPEG-DASH, Media Source Extensions (MSE), WebSockets usw. an dieser Stelle nicht mehr thematisiert werden.
Der Source Code des Prototyps ist unter Berücksichtigung des Erstelldatums zu betrachten. Zum Zeitpunkt der Erstellung ist die Spezifikation der Media Source Extensions (MSE) noch nicht final und wird noch unterschiedlich gut von den Browsern unterstützt. Der vorgestellte Lösungsansatz funktioniert grundsätzlich unter allen neueren Browsern, aber erfordert hier und da noch ein paar Anpassungen. Zum Beispiel werden nicht alle Codecs von allen Browsern unterstützt. Der Prototyp ist unter Firefox getestet und lauffähig.
Das Video-Tag in Verwendung mit den MSE wird mittlerweile auch von YouTube und anderen Video Streaming Portalen bei der Auslieferung von Videos verwendet, wenn der Browser dies unterstützt. Anderenfalls wird Flash verwendet. Auf lange Sicht wird die Kombination dieser beider Technologien aber Flash wohl ablösen.



1. Ziel

Das Ziel des Vortrags war es, zu zeigen, wie sich auf Basis von Webstandards eine Live Video Streaming Plattform bauen lässt. Die folgenden Vorüberlegungen und der Lösungssatz dienen an dieser Stelle nur dazu, den Source Code im richtigen Kontext zu betrachten.

2. Vorüberlegungen


Es soll ein Video von einem Sender zu einer Plattform gestreamt werden, um dieses dann von der Plattform schließlich auf alle Empfänger zu verteilen. Erste Überlegungen führen direkt zu den grundsätzlichen Fragen.
Im ersten Schritt ist zu klären, wie der Video Stream überhaupt verpackt und übertragen werden kann. Auf der Plattform, im zweiten Schritt, ist zu klären, wie der Stream entgegengenommen, verarbeitet und verteilt werden soll. Für den dritten Schritt der Übertragung ist die Frage nach der Übertragung des Video Stream zu beantworten. Und schließlich ist im vierten Schritt zu klären, wie der Stream überhaupt angezeigt werden kann.

3. Lösungsansatz


Die Antwort auf alle Fragen liefert die Kombination der Technologien MPEG-DASH, REST, WebSocket, HTML5-Video Tag und der Media Source Extensions. Für die Verpackung und Übertragung des Streams wird MPEG-DASH verwendet. Die Grundidee hierbei ist die Übertragung des Video Streams paketweise. Dabei spricht man auch von Video chunks. Jeder Chunk enthält dabei einige Sekunden Video- und Audio-Material. Über eine REST Schnittstelle wird der Stream entgegen genommen und per WebSockets auf die Empfänger verteilt. Angezeigt wird der Stream in einem HTML5-Video-Tag.
Im Prototyp werden die Video chunks an eine REST Schnittstelle gepostet. Möglich ist natürlich auch die Übertragung der chunks auf anderem Wege. Lediglich die etwaige Übermittlung von Metainformationen wie z.B. Längen- und Breitengrad des Streamers kann in jedem Fall komfortabel über eine REST Schnittstelle erfolgen. Die Besonderheit an diesem Lösungsansatz ist, dass der Übertragungsweg vom Sender bis hin zum Empfänger rein HTTP basiert ist. Es sind keine besonderen Streaming-Protokolle vonnöten und Firewalls sollten auch keine Probleme bereiten.

4. Links & Tools

Hier die Links zu den Spezifikationen der verwendeten Technologien und ein paar Links zu hilfreichen Tools, um MPEG-DASH-Dateien zu erzeugen. Zum Testen können auch normale MPEG-Dateien in einzelne Video chunks nach MPEG-DASH Manier umgewandelt werden (Hinweis: Datei fragmentieren, segmentieren und splitten).

Einführung WebSockets

Einführung RESTful WebServices

MPEG Standard

MPEG-DASH
HTML5 & Media Source Extensions (MSE)

Tools

5. Prototyp

Der Prototyp ist unter Firefox 44.0.2 getestet und lauffähig. Serverseitig wurde das JDK 1.8.0_40 und der WildFly 8.2.0 verwendet. Zum Zeitpunkt der Erstellung war die MSE-Spezifikation noch nicht final, aber das, was benötigt wird, ist in den aktuellen Browsern implementiert. Je nach Version muss z.B. bei Firefox noch die MSE-Unterstützung aktiviert werden. Am besten wird die neuste Version installiert. Zu beachten ist, dass noch nicht alle Browser alle Video Codecs unterstützen. Zudem müssen von Browser zu Browser noch Anpassungen vorgenommen werden, falls jemand den Prototyp weiter ausbauen möchte. Bei manchen werden Events nicht immer so wie erwartet geworfen. Zum Beispiel wird an einer Stelle des Prototyps das Event "update" und nicht wie eigentlich erwartet das Event "updateend" gefangen. Dies fällt aber eher in die Rubrik Kinderkrankheiten. Für die Zukunft kann eine funktionierende und problemlose Umsetzung der dann finalisierten MSE in allen Browsern angenommen werden. Zumal die großen Video Streaming Portale diese Technik unterstützen und verwenden.

Auf dem Bild ist ein Snapshot des Prototypen zu sehen. Die Live Video Streaming Funktionalität wurde noch um einen Chat erweiteret, über welchen während des Streamvorgang Textnachrichten und Bilder ausgetauscht werden können.

Wenn es meine Zeit erlaubt, werde ich weitere Artikel zum Thema schreiben, wo ich dann auch im Detail auf MPEG-DASH und die Media Source Extensions eingehe. Vielleicht wird das Ganze auch noch zu einem richtigen Projekt ausgebaut.


6. Source Code

StreamUp-Anwendung auf GitHub
Tags: video, life, streaming, javaland, prototyp, vortrag
Guido Oelmann     Sonntag, 13. März 2016 0    1205
@
(Email Adresse wird nicht veröffentlicht)
(kein HTML erlaubt)
Bitte beantworten Sie die einfache mathematische Frage.
  


Keine Kommentare vorhanden.