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).
[ad]
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
Bin gerade auf der Suche nach „dual buffering flash“ auf den Originalartikel und diesen Artikel gestoßen.
Dieses Dual Buffering sollte man aber auf keinen Fall für Live Flash Streaming einsetzen. Das führt oft zum Einfrieren des Streams.
Noch ein weiteres „Problemchen“ ergibt sich durch den Flashplayer unter OS X:
In der Zeit zwischen dem Auslösen des seek() und dem Abspielen an der neuen Position sorgt ein kleiner Bug dafür, dass das Video ein stück nach vorne (innerhalb des Buffers) springt und hier das Video abspielt.
Beispiel: Ein Video befindet sich in der 30. Sekunde und ein 20 Sek. Buffer ist gefüllt. Wird nun einige Videominuten nach vorne gespult (seek()), dauert es z.B. 0,5 bis 3 Sekunden bis die gewählte Abspielposition läuft. In dieser Sekunde spielt der Flashplayer 9 unter OS X aber z.B. die 55 – 58. Sekunde des Videos ab (also das Ende des großen Buffer)!
Da bei intensiver Nutzung von „dual buffering flash“ beim Spulen evtl. für 0,5 bis 3 Sekunden eine andere Scene läuft (die 20 Sekunden „in der Zukunft liegt“), könnte dies manchen Zuschauern oder Kunden negativ auffallen. Ist der Buffer jedoch ohnehin nur 2 Sek. groß, fällt dieser kleine Zeitsprung beim Abspielen + Spulen nicht besonders auf.
Meine Beobachtung.
Interessant, danke für den Hinweis.
Hallo,seit ich den FLASH PLAYER geladen habe,wird das Video alle 10-15 Sekunden für längere Zeit unterbrochen.
Der Film ist mehr unterbrochen,als dass er läuft,im Schnitt 3/1 und das ist wirklich nicht lustig.
Wie kann man dieses Buffering lösen?
Oder gibt es überhaupt eine Lösung?
Besten Dank und Gruss.KO.