2007.12.12
category
comments

AS3のFlvPlayBackを試してみる

AS2の時とコードの記述が少し変わったみたい。ポイントはメタデータの取得方法とムービー状態(再生・停止・シークなど)をどう捕まえるか。メタデータに関してはMetadataEventのMETADATA_RECEIVED をリスナーに登録しておいて、受け取るハンドラの中でそれぞれ取り出してやればよい(左上の白文字)。次にムービー状態に関してはVideoEventに捕まえたいイベントオブジェクトを登録しておくだけ。あとはハンドラ内でムービーの再生時間などを処理してやればよい。playheadPercentageを使うと、現在の再生ヘッドが全体の何パーセントなのかを示してくれる。トータルタイムにこのパーセンテージを乗算すれば現在の再生時間が簡単に出せる。

デフォルトのシークバーコンポーネントには再生ヘッドまでのプログレス表示をしてくれない。今回はシークバーと同じ幅のムービークリップをあらかじめシークバーコンポーネントの中に配置しておいてscaleXにplayheadPercentageの値を入れて動作させてみた(シークバーの白い部分)。

ACTIONSCRIPT:
package
{
    import flash.display.MovieClip;
    import fl.video.MetadataEvent;
    import fl.video.FLVPlayback;
    import fl.video.VideoEvent;
    import flash.text.TextField;
   
   
    public class Main extends MovieClip
    {
        //------------------------------
        //    コンストラクタ
        //------------------------------
        public function Main()
        {
            player.source = "test.flv";
            player.bufferTime = 1;
           
            player.addEventListener(MetadataEvent.METADATA_RECEIVED, onMetadata);
            player.addEventListener(VideoEvent.READY, onReady);
            player.addEventListener(VideoEvent.PLAYING_STATE_ENTERED, onPlaying);
            player.addEventListener(VideoEvent.PLAYHEAD_UPDATE, onPlayHead);
            player.addEventListener(VideoEvent.PAUSED_STATE_ENTERED, onPause);
            player.addEventListener(VideoEvent.COMPLETE, onComplete);
           
            player.playPauseButton = playBtn;
            player.muteButton = muteBtn;
            player.backButton = backBtn;
            player.seekBar = seekBar;
            player.fullScreenButton = fullScreenBtn;

        }
       
       
        //------------------------------
        //    メタデータの取得
        //------------------------------
        private function onMetadata(e:MetadataEvent):void
        {
            meta.appendText("FrameRate = " + player.metadata.framerate + "\n");
            meta.appendText("VideoDataRate = " + player.metadata.videodatarate + "\n");
            meta.appendText("Height = " + player.metadata.height + "\n");
            meta.appendText("Width = " + player.metadata.width + "\n");
            meta.appendText("Duration = " +player.metadata.duration + "\n");
        }
       
        //------------------------------
        //    FLVの初期化
        //------------------------------
        private function onReady(e:VideoEvent)
        {
            var time = String(Math.floor(player.totalTime));
            var minute = String(Math.floor(time / 60));
            var second = String(time % 60);
           
            if (minute <10)
            {
                minute = "0" + minute;
            }
           
            if(second <10)
            {
                second = "0" + second;
            }
           
            total.text = "/ " + minute + ":" + second;
            now.text = "00:00";
            stateText.text = "PAUSE";
           
            seekBar.seekProgress.scaleX = 0;
        }
       
       
        //------------------------------
        //    FLVの再生時
        //------------------------------
        private function onPlaying(e:VideoEvent)
        {
            stateText.text = "PLAY";
        }
       
       
        //------------------------------
        //    FLVの再生中
        //------------------------------
        private function onPlayHead(e:VideoEvent)
        {
            var time = Math.floor(player.totalTime * player.playheadPercentage / 100);
            var minute = Math.floor(time / 60);
            var second = time % 60;
           
            if (minute <10)
            {
                minute = "0" + minute;
            }
           
            if(second <10)
            {
                second = "0" + second;
            }
           
            now.text = minute + ":" + second;
           
            //-----[再生ヘッドまでのプログレスバー]
            seekBar.seekProgress.scaleX = player.playheadPercentage / 100;
        }
       
       
        //------------------------------
        //    FLVの一時停止時
        //------------------------------
        private function onPause(e:VideoEvent)
        {
            stateText.text = "PAUSE";
        }
       
       
        //------------------------------
        //    FLVの再生終了時
        //------------------------------
        private function onComplete(e:VideoEvent)
        {
            stateText.text = "FINISH";
        }
    }
}

1 Comments

  1. simo Says

    フルスクリーンモードを実装するときはSWFObjectに1行追加するだけ。

    so.addParam(”allowFullScreen”, “true”);

Post a comment




Comment

Trackbacks

この記事のコメント・トラックバックRSS