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";
        }
    }
}

2007.12.02
category
comments

HIGH5に行ってきた

dsc_1313.jpg

六本木のAXISビルでHIGH5が開催されました。HIGH5とはデザインポータルサイトのHITSPAPERが主宰するデザインカンファレンス。5組のスピーカーが自身のクリエイティブシーンについて紹介してくれた。特に面白かったのがWOWさんとPROJECTORさんの話。

WOWさんに見せてもらった映像作品はどれもハイレベルで圧倒されるものばかり。10周年を迎えてのアートブックの話や、ロンドンでの展示会の様子、新作映像、今後の展開など。そして会社内ではアートプロジェクトをいくつか立ち上げてるという話。クライアントワークとは別でそれぞれのデザイナーが好きに参加して作品を作っているらしい。現在は東京、仙台、ロンドンで活動中とか。クライアントに提案するときは必ずプラスアルファ(サービス精神)を盛り込むらしい。こうする事で次につながる仕事にしているようだ。

PROJECTORさんの話はBIG SHADOWとUNIQLOについて。BIG SHADOWでは現状にない新しいメディアを作りたかったという話。参加型屋外広告がなぜ渋谷だったのか、なぜあのビルだったのかなど。また多種多様な業界の人に参加してもらって形になったプロジェクトと言うこと。UNIQLOに関してはリンクポピュラリティを上げたいと言うクライアント側からの要望が全ての始まり。どうやったら人に伝えたくなるか、話題になるか、バイラルになるか。MIXPLAY、UNIQLOCK、UNICLO JUMPの一連プロモーションの裏話を聞くことができて非常に面白かった。

有意義な良いカンファレンスでした。

page 1 / 11