Im Artikel Dynamic Streaming mit dem Flash Media Server wurde bereits das Dynamic Streaming beschrieben. Zur Veranschaulichung des Streamwechsel habe ich dem dynamischen Stream vier Videos (01.flv bis 04.flv) zugeordnet, die unterschiedliche Kameraperspektiven haben. Das Beispiel zeigt, wie man manuell zwischen diesen Streams umschalten kann.
Demo anschauen
Da ich keinen Flash Media Server im Netz habe, habe ich einen kurzen Screencast erstellt:
[kml_flashembed fversion=“9.0.0″ movie=“/wp-content/flvplayer/flvplayer.swf“ targetclass=“flashmovie“ base=“.“ bgcolor=“ffffff“ publishmethod=“dynamic“ width=“640″ height=“410″ scale=“noscale“ salign=“tl“ allowfullscreen=“true“ allowscriptaccess=“always“ fvars=“video=dynamic-manual.mp4&contentpath=/wp-content/flvplayer/content“]
[/kml_flashembed]
Videomaterial
Die Videos sind alle gleich lang und wurden mit identischen Einstellungen kodiert. Die zugeordneten Bitraten von 100 bis 400 im ActionScript-Code sind also beliebig gewählt und stimmen nicht.
[as]
dsi.addStream(„01“, 100);
dsi.addStream(„02“, 200);
dsi.addStream(„03“, 300);
dsi.addStream(„04“, 400);
[/as]
Die Audiospur ist bei allen Videos gleich. Es ist schön zu hören, dass auf der Audioebene überhaupt kein Wechsel zwischen den Streams hörbar ist.
manualSwitchMode()
Die Methode manualSwitchMode(mode:Boolean)
der DynamicStream-Klasse dient eigentlich nur als Demonstration oder zu Testzwecken. Übergibt man true
, kann man danach manuell zwischen den verschiedenen Streams springen.
Toggles between manual switch mode and automatic switch mode in the DynamicStream class. When set to true, you can use the methods switchToStreamName(), switchToStreamRate(), switchUp(), and switchDown() to control the class. When set to false, the methods are not available.
Um auf den DynamicStream der FLV Playback Komponente zugreifen zu können, muss man sich bis zum NetStream-Objekt durchhangeln. Da die DynamicStream-Klasse von der NetStream-Klasse erbt, wandelt man die NetStream-Instanz in einen dynamischen Stream um. Die Zeile lautet: ds = DynamicStream(myFLVPlayback.ncMgr.videoPlayer.netStream);
Jetzt kann man z.B. mit ds.switchToStreamRate(200)
auf den zweiten Stream wechseln.
Buffer
Vor dem Wechsel zu einem anderen Stream wird jedoch zuerst das restliche Videomaterial abspielt, das sich noch im Buffer befindet. Es kommt zu einer Verzögerung. Ist der Buffer leer, wird an der nächstmöglichen Stelle auf den anderen Stream gesprungen. Damit die Streams schneller wechseln, habe ich die Bufferzeiten im Beispiel heruntergesetzt.
Informationen aus dem DynamicStream
Interessant sind auch die Werte, die sich aus dem DynamicStream-Objekt auslesen lassen. Dazu gehören z.B.
- der Name des aktuellen Streams
- die aktuelle Bitrate
- verschiedene Bufferzeiten
- Anzahl der dropped Frames
- vieles mehr
Sourcecode
Der Quellcode der Beispielanwendung lautet:
[xml]
[/xml]
[ad]
Hello,
I work with Netstream, video.attachVideo() to read a stream rtmp.
I would like to take „droppedFrames“, „currentBytesPerSecond“ by using „netStream.info“. But it don’t work…
Do you have any idea?
thanks much.
Robert
Not sure if these properties are available in NetStream … You should have a look in the actionscript reference.