Beispiel: StageVideo im Einsatz

Wie bereits berichtet, führt Adobe mit Flash Player 10.2 das StageVideo ein. In diesem Artikel geht es darum, wie man die hardwarebeschleunigte Darstellung von Videos in ActionScript genau verwendet.

Voraussetzungen

Um das StageVideo zu verwenden, benötigt man aktuell noch den Flash Player 10.2 aus den Adobe Labs (später dann den finalen Flash Player 10.2). Außerdem muss man das Flex SDK ab Build 18623 zum Kompilieren einsetzen und zusätzlich den Kompilerbefehler „-swf-version=11“ ergänzen.

Vektor mit StageVideo-Objekten

Zuerst fängt man das Event StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY ab. Dadurch erkennt man, ob die Verwendung von StageVideo möglich ist oder nicht.

Sollte StageVideo vorhanden sein, muss keine eigene Instanz davon erstellen werden, sondern man bekommt diese aus einem Vektor mit StageVideo-Objekten. Der Vektor enthält so viele Objekte, wie StageVideos gleichzeitig möglich sind (siehe voriger Artikel).

Als Fallback folgt ein gewöhnliches Video-Objekt, falls StageVideo nicht möglich sein sollte.

Zuletzt legt man noch den Viewport (also die dargestellte Größe) des StageVideo fest.

Display List vor dem StageVideo

Um zu zeigen, dass das StageVideo tatsächlich hinter der Display-List liegt, habe ich noch ein Textfeld eingefügt. Das normale Video-Objekt legt sich über das Textfeld, da es nach ihm zur Bühne hinzugefügt wird. Nicht so jedoch beim StageVideo: Das Textfeld ist sichtbar, da sich das StageVideo hinter allen Objekten befindet.

Quellcode

[as]
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.geom.Rectangle;
import flash.media.*;
import flash.net.*;
import flash.text.*;

[SWF(width=“640″, height=“360″)]
public class StageVideoDemo extends Sprite
{

private var stageVideoAvailable:Boolean;
private var stageVid:StageVideo;

public function StageVideoDemo()
{
stage.addEventListener(StageVideoAvailabilityEvent.STAGE_VIDEO_AVAILABILITY, onAvailable);
}

/**
* Wird aufgerufen und enthält Info, ob StageVideo verfügbar
*
*/
protected function onAvailable(event:StageVideoAvailabilityEvent):void
{
stageVideoAvailable = (event.availability == StageVideoAvailability.AVAILABLE);
initVideo();
}

/**
* Video starten
*
*/
private function initVideo():void
{

// dummy text feld auf display list platzieren
addTextField();

// verbindung initialisieren
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = this;

// stage video verfügbar?
if(stageVideoAvailable) {
// erstes Objekt aus dem Vektor für StageVideos nehmen
stageVid = stage.stageVideos[0];
stageVid.addEventListener(StageVideoEvent.RENDER_STATE, onRender);
stageVid.attachNetStream(ns);
}
// wenn kein stage video verfügbar
else {
var vid:Video = new Video(640,360);
addChild(vid);
vid.attachNetStream(ns);
}

// video abspielen
ns.play(„http://mediapm.edgesuite.net/osmf/content/test/logo_animated.flv“);

}

protected function onRender(event:StageVideoEvent):void
{
// darstellungsgröße festlegen
stageVid.viewPort = new Rectangle(0,0,640,360);
}

/**
* Dummy Textfeld
*/
private function addTextField():void {
var tf:TextField = new TextField();
tf.text = „Text field on display list“;
tf.width = 500;

var format:TextFormat = new TextFormat();
format.color = 0xffffff;
format.size = 20;

tf.setTextFormat(format);
addChild(tf);
}

/**
* Delegates für NetStream
*/
public function onMetaData(e:Object):void {
}
public function onXMPData(e:Object):void {
}

}
}
[/as]

Link: New Tutorial Introducing the StageVideo API

[ad]

Schreibe einen Kommentar

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