Dynamic Streaming mit dem Flash Media Server

Wie im Artikel „Dynamic Streaming: FMS 3.5 im Anmarsch” beschrieben, geht es bei „Dynamic Streaming“ darum, die Qualität des Videostreams dynamisch an die Bandbreite des Nutzers anzupassen. Sinkt oder steigt die Bandbreite während der Betrachtung, wird das Video auf eine andere Qualitätsstufe umgeschaltet. Um es für den Betrachter angenehm zu machen, geschieht dies unterbrechungsfrei.

Ein weiteres Problem, das mit Dynamic Streaming gelöst wird, können Videos in hoher Auflösung (HD) sein. Hat der Rechner des Nutzers zu wenig Rechenleistung, kann der Videostream nicht schnell genug dekodiert werden. Die Folge ist, dass es stottert und Einzelbilder verworfen werden (dropped frames). Auch hier ist es sinnvoll, stattdessen auf ein Video mit niedriger Datenrate zu wechseln, da dieses weniger CPU-Leistung benötigt.

QoS: Quality of Service

Damit man auf Änderungen (z.B. geringere Bandbreite) überhaupt reagieren kann, muss man die aktuellen Qualitätsdaten der Verbindung (QoS / Dienstgüte) ständig erfassen.

Dazu gibt es die neue Eigenschaft info der NetStream-Klasse. Dort finden sich in einem Objekt vom Typ NetStreamInfo aktuelle Informationen, z.B. wie schnell der Buffer gefüllt werden kann oder wie viele „Dropped Frames” es bisher gab. Man muss die Eigenschaft jedoch nicht selbst auswerten: Die Klassen DynamicStream (Erweiterung der NetStream-Klasse) und DynamicStreamItem vereinfachen die Handhabung.

Noch einfacher geht’s mit der vor kurzem aktualisierten FLV Playback Komponente 2.5, die nun auch das Dynamic Streaming des Flash Media Server 3.5 unterstützt. Sie enthält die entsprechenden Klassen und APIs, um auf einfache Weise das dynamische Streaming des FMS zu verwenden (siehe unten).

Voraussetzungen (Server + Client)

Serverseitig muss nichts eingerichtet werden, da alle Varianten des FMS 3.5 (Flash Media Interactive Server, Flash Media Streaming Server, Flash Media Development Server) das dynamische Streaming automatisch unterstützen. Die Videos müssen einfach in verschiedenen Bitraten auf dem Server liegen. Ein Set an Beispielvideos liegt der Developer Edition bei.

Clientseitig wird der Flash Player 10 oder AIR 1.5 vorausgesetzt.

Dynamic Streaming mit der FLV Playback Komponente (ActionScript)

[as]

var dsi:DynamicStreamItem = new DynamicStreamItem();
dsi.uri = „rtmp://192.168.2.108/vod/“;
dsi.addStream(„mp4:sample1_150kbps.f4v“, 150);
dsi.addStream(„mp4:sample1_700kbps.f4v“, 700);
dsi.addStream(„mp4:sample1_1500kbps.f4v“, 1500);
vid.play2(dsi);

[/as]

Die wesentlichen Neuerungen sind in den obigen Codezeilen enthalten. Man erstellt ein DynamicStreamItem (Zeile 1), dem man die Videos mit den verschiedenen Bitraten hinzufügt (Zeile 3-5). Außerdem wird die URL zum FMS und der verwendeten Applikation „vod“ übergeben (Zeile 2). Mit der neuen Methode play2 startet man das „dynamische Video”.

Die Videoqualität passt sich nun selbstständig an.

Ein komplettes Flex-Beispiel sieht so aus:
[xml]





[/xml]
Es basiert auf dem Beispiel im oben bereits erwähnten Artikel zur FLV Playback Komponente 2.5.

Testen von Bandbreitenschwankungen

Da bei einem lokalen Flash Media Server quasi immer ausreichend Bandbreite verfügbar, ist ein Test nicht einfach. Man muss die Bandbreite künstlich begrenzen. Hier hilft z.B. der Artikel Bandwidth Throttling on the Mac Using WaterRoof/ipfw.

[ad]

5 Gedanken zu „Dynamic Streaming mit dem Flash Media Server“

  1. Pingback: www.video-flash.de
  2. Hallo,
    als erstes möchte ich sagen, dass Sie Ihre Seite mit vielen wirklich hilfreichen Themen bespickt haben, danke :-), werde ab jetzt öfters vorbei schauen….

    ich möchte für meine Webseite einen eigenen Flash Media Server betreiben und suche Erfahrungswerte mit der Bandbreite.

    Ich habe 1 mb/s upload im Moment und könnte den auf 5 MB/s erhöhen. ( Ich möchte kein Serverhousing und auch keinen Vserver haben )

    Wissen Sie, wie die Bandbreite errechnet werden kann. Meine Anforderung 50 Videos gleichzeitig ansehen können, bei 270kb/s (bitrate)

    vielleicht fällt Ihnen was dazu ein :-)

  3. Danke.
    Prinzipiell ganz einfach:
    50 x 270 KB/s = 13.500 KB /s (also ungefähr 13 MB).

    Evtl. aufpassen, ob es wirklich KB/s (MB/s) sind oder nicht vielleicht KBit/s (Mbit/s).
    -> 1 MBit/s = 1/8 MB/s (also einfach durch 8 teilen)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert