読者です 読者をやめる 読者になる 読者になる

Flash10.2 GPUでの再生方法

Flash10

本日アナウンスされた Flash Player 10.2 Beta1 でのGPUでの動画再生方法です。
ポイントとしては stageVideos でビデオのレイヤーを取得して、viewPortを指定してあげる感じ。

var sv:stageVideos = stage.stageVideos[0];
sv.viewPort = new Rectangle( 0 , 0 , 1920 , 1080 );
sv.attachNetStream(ns);

あっているか分かりませんがとりあえず動いたのでソースです。

package
{
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageDisplayState;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.events.NetStatusEvent;
    import flash.geom.Rectangle;
    import flash.media.StageVideo;
    import flash.net.NetConnection;
    import flash.net.NetStream;
    import flash.ui.Keyboard;
    /**
     *
     * @author Thibault Imbert
     *
     */
    [SWF(frameRate="1", backgroundColor="#ffccff" , width="1920", height="1080")]
    public class flash10_2Test extends Sprite
    {
        private var sv:StageVideo;
        private var nc:NetConnection;
        private var ns:NetStream;
        /**
         *
         *
         */
        public function flash10_2Test()
        {
            addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
        }
        /**
         *
         * @param event
         *
         */
        private function onAddedToStage(event:Event):void
        {
            //ステージの設定
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            //ネットコネクション作成
            nc = new NetConnection();
            nc.connect(null);
            ns = new NetStream(nc);
            ns.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
            ns.client = this;
            //キーボードリスナー
            stage.addEventListener(KeyboardEvent.KEY_DOWN , onKeyDown );
        }
        //キーボードを押したら動画を再生
        /**
         *
         * @param e
         *
         */
        private function onKeyDown( e:KeyboardEvent ):void
        {
            if ( sv == null && stage.stageVideos.length > 0 ){
                sv = stage.stageVideos[0];
                sv.viewPort = new Rectangle( 0 , 0 , 1920 , 1080 );
                sv.attachNetStream(ns);
                ns.play( "anim_1.mp4" );
            }
        }
        //以下はネットコネクション関係
        /**
         *
         * @param infoObject
         *
         */
        private function onNetStatus(infoObject:NetStatusEvent):void
        {
            var key:String;
            for (key in infoObject)
            {
                trace(key + ": " + infoObject[key]);
            }
        }
        /**
         *
         * @param infoObject
         *
         */
        public function onXMPData(infoObject:Object ):void
        {
            var key:String;
            for (key in infoObject)
            {
                trace(key + ": " + infoObject[key]);
            }
        }
        /**
         *
         * @param infoObject
         *
         */
        public function onMetaData ( infoObject:Object ):void
        {
            var key:String;
            for (key in infoObject)
            {
                trace(key + ": " + infoObject[key]);
            }
        }
    }
}