Im Adobe Developer Center steht seit einer Weile ein Artikel mit dem Thema „Implementing a dual-threshold buffering strategy in Flash Media Server“ von Fabio Sonnati. Dies hört sich zunächst einmal komplizierter an als es wirklich ist …

Die Strategie beschäftigt sich mit der Puffergröße eines Videostreams. Üblicherweise steht man vor dem Problem, sich für eine Puffergröße zu entscheiden. Sie lässt sich über die Methode NetStream.setBufferTime(Zeit in Sekunden) setzen. Doch nach welchen Kriterien wählt man die Zeitangabe des Buffers?

Die Vor-/Nachteile eines kleinen Buffers (zwei bis drei Sekunden) sind:

  • Vorteil: Der Buffer ist schnell gefüllt, weshalb das Video schnell startet.
  • Nachteil: Der Buffer kann sich beim Betrachten des Videos aufgrund von Bandbreitenschwankungen leicht leeren. Als Folge wird das Video unterbrochen.

Ein großer Buffer (z.B. 20 Sekunden oder mehr) hat folgende Eigenschaften:

  • Vorteil: Unempfindlich gegenüber Schwankungen in der Bandbreite.
  • Nachteil: Zu Beginn dauert es lange, bis der Buffer gefüllt ist. Der Nutzer muss deshalb lange warten, bis das Video startet.

Der Ansatz des „Dual-Threshold Buffering“ liegt nun darin, die Vorteile der beiden Puffergrößen zu vereinen. Statt einer statischen Zeitangabe, die immer gleich bleibt, wird einer flexiblere Lösung gewählt. Dazu werden zwei Zeitangaben bzw. Schwellwerte (=threshold) definiert, z.B. 2 Sekunden und 25 Sekunden. Zu Beginn wird ein kleiner Pufferspeicher gewählt (2s), damit das Video schnell startet. Danach wird umgeschaltet auf einen größeren Pufferspeicher (25s).

Bei der konkreten Realisierung im ActionScript Beispielcode werden dazu die Statusmeldungen der NetStream-Klasse genutzt (vgl. Kapitel 14.3 Ereignisprozeduren der NetStream-Klasse / „Interaktives Video …“). Sobald der kleinere Anfangs-Buffer voll ist (NetStream.Buffer.Full), wird die Puffergröße erweitert. Im Gegenzug wird bei einem leeren Pufferspeicher (NetStream.Buffer.Empty die Puffergröße erniedrigt. So wird auch gewährleistet, dass nach dem Spulen (ns.seek) das Video wieder schnell startet.

Link: Implementing a dual-threshold buffering strategy in Flash Media Server
Link: Dual Threshold AS3, Klassendatei für ActionScript 3 von Owen van Dijk