LoginSignup
6
7

More than 5 years have passed since last update.

Flash Player 20 / Adobe AIR 20の新機能

Last updated at Posted at 2015-12-10

Flash Player 20 / Adobe AIR 20の新機能

すごいですね。もうFlash Player 20まできました。
Flash Player 11.xまでのバージョンアップのスピードを考えると、3-4年前はFlash Player 20とかはるか遠い未来だと思っていました。Flash Player 12からバージョン番号の付け方がかわったから、かなりスピーディーにバージョン番号が進んでいます。

新機能

  • Android SDKのアップデート
  • iOSでSecureSocket APIのサポート
  • MAC OS XのAIRアプリを64 bit化
  • ビデオの角度情報がメタデータとして取得できる
    • スマホだと縦撮りとかするからね
  • PPAPIのFlash Player (=ChromeのFlash Player)でベクターで印刷できるようになった
  • Flash Player "ハードウェアアクセラレーションの設定"がWindows 8/10のEdgeとIEでできるようになった
  • AGAL3が使えるようになったよ! 新しいAGALMiniAssembler.asも公開されました。
  • Stage3D の 「インスタンス」 描画機能

Stage3D の 「インスタンス」 描画機能に関しては上条さんのブログに詳しくまとまっています。いつもありがとうございます!

http://cuaoar.jp/2015/11/flash-player-adobe-air-2-1.html
http://cuaoar.jp/2015/12/flash-player-adobe-air-2-2.html

ビデオの角度の取得について

次のようなコードを使って、ビデオの角度を計算します。trackHeaderBoxMatrixmovieHeaderBoxMatrixというのが新しいメタデータ情報です。リリースノートにサンプルコードが載っているのですが、たぶん間違ってる気がします。メタデータはMatrixオブジェクトではなく、ただのArrayです。サンプルコードではいきなりMatrixとして扱っていますが、エラーになると思います。

package
{
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageQuality;
    import flash.display.StageScaleMode;
    import flash.geom.Matrix;
    import flash.geom.Point;
    import flash.media.Video;
    import flash.net.NetConnection;
    import flash.net.NetStream;

    public final class Main extends Sprite
    {

        //----------------------------------------------------------
        //
        //   Property 
        //
        //----------------------------------------------------------

        private var video:Video;

        //----------------------------------------------------------
        //
        //   Constructor 
        //
        //----------------------------------------------------------

        public function Main()
        {
            stage.quality = StageQuality.LOW;
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;

            // ビデオを作成
            video = new Video();
            addChild(video);

            // ビデオ接続のためのNetConnectionを作成
            var nc:NetConnection = new NetConnection();
            nc.connect(null);

            // ネットストリームも作成
            var ns:NetStream = new NetStream(nc);
            ns.client = {};
            ns.client.onMetaData = ns_onMetaData;
            ns.client.onCuePoint = ns_onCuePoint;

            // ビデオにネットストリームをくっつける
            video.attachNetStream(ns);

            // ビデオファイルを再生
            ns.play("saru_aruku.m4v");
        }

        /** メタデータ取得時のハンドラーです */
        private function ns_onMetaData(info:Object):void
        {
            trace("metaData");

            // ビデオの配置
            video.width = info.width;
            video.height = info.height;

            // とりあえず現状の変形行列を取得
            var matrix:Matrix = video.transform.matrix;

            // 古いビデオサイズを保持
            var oldSize:Point = new Point(video.width, video.height);

            // 基準点を中央に設定
            matrix.translate(-(oldSize.x / 2), -(oldSize.y / 2));

            // 新しいメタデータ情報の「trackHeaderBoxMatrix」を持っているか?
            if (info.hasOwnProperty("trackHeaderBoxMatrix"))
            {
                // Matrixという名前なのに正体は、は・い・れ・つ!
                var arr:Array = info.trackHeaderBoxMatrix[0];

                // trackHeaderBoxMatrixは行列の配列です。
                // なぜならば、ビデオのトラックが複数存在するケースもあるからです。

                // 配列を行列に変換
                var thbMtx:Matrix = new Matrix(
                    arr[0],
                    arr[1],
                    arr[2],
                    arr[3],
                    arr[4],
                    arr[5]
                    );
                // 持っていたらTrack Header Box of Video Trackを変換行列にくっつける
                matrix.concat(thbMtx);
            }

            // 新しいメタデータ情報の「movieHeaderBoxMatrix」を持っているか?
            if (info.hasOwnProperty("movieHeaderBoxMatrix"))
            {
                // Matrixという名前なのに正体は、は・い・れ・つ!
                arr = info.movieHeaderBoxMatrix;

                // 配列を行列に変換
                var mhbMtx:Matrix = new Matrix(
                    arr[0],
                    arr[1],
                    arr[2],
                    arr[3],
                    arr[4],
                    arr[5]
                    );

                // 持っていたらMovie Header Boxを変換行列にくっつける
                matrix.concat(mhbMtx);
            }

            // 基準点を元に戻す
            matrix.translate((oldSize.x / 2), (oldSize.y / 2));

            // ビデオに変換行列を適用
            video.transform.matrix = matrix;
        }

        private function ns_onCuePoint(item:Object):void
        {
            trace("cuePoint");
        }
    }
}

Adobe Flash Builder 4.7でデバッグしてもやっぱり配列。

151210_metadata.png

設定方法

Adobe Flash Playerサポートセンターから最新版の「PlayerGlobal (.swc)」ファイルをダウンロードします。

このファイルを次の場所に配置します。

Flex SDKのパス/frameworks/libs/player/20.0/playerglobal.swc

※「20.0」というフォルダは新規作成ください。
※ダウンロードした「playerglobal20_0.swc」ファイルはリネームして「playerglobal.swc」にします。いつも、リネームするのは面倒ですよね。

新しい SWF のバージョンは 31。Flex SDKを使ってコンパイルするときは、コンパイル引数に次を設定しましょう。

-swf-version=31

Adobe Flash Builder 4.7での設定画面

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7