AIRアプリで特定のファイルフォーマットのファイルを開く方法

| | Save This Page to del.icio.us このエントリーを含むはてなブックマーク

 社内でアルファチャンネル付きのFLVを開くアプリケーションはないかと聞かれ、よく考えたらそういうアプリケーションが見当たらないことに気付きました。

 FLVならばFlashで開けるだろう、ということでAdobe AIRを使って「FLV Player」を社内向けに作ることにしました。

 ローカルアプリなんだから、普通にFLVファイルをダブルクリックして開いた時にこの「FLV Player」で開けないものかな、と思って調べたら出来たのでまとめておきます。

 まず、ADF(アプリケーション記述ファイル)のfileTypesのところにfileTypeを加えます。

<fileTypes>
      <fileType>
          <name>FlashVideo</name>
          <extension>flv</extension>
          <description>Flash Video</description>
          <contentType>video/flv</contentType>
      </fileType>
</fileTypes>

 こうすることで、FLVを開く準備が出来ました。マニュアルっぽい書き方をすると、これでアプリケーションにファイルを関連付けした、ということです。

 次に、FLVファイルがAIRアプリ側にどうやって渡ってくるのかなのですが、これにはflash.events.InvokeEventクラスを使います。mx.rpc.events.InvokeEventとは違いますのでご注意を。

 InvokeEventは通常起動時にNativeApplicationによって送出されるのですが、AIRアプリに関連付けられたファイルを開くと、NativeApplicationは追加のInvokeEventを送出するので、これを利用します。

 ドキュメントクラスをWindoedApplicationクラスにしている場合は、

addEventListener(InvokeEvent.INVOKE, invokeHandler);

 としてハンドラを登録します。

 ハンドラの処理はこんな感じです。

private function invokeHandler(event:InvokeEvent):void
{
    var path:String = event.arguments.shift();
    if (path) {
        var file:File = new File(path);
        switch (file.extension) {
            case "flv":
            VideoDisplay(this['videoDisplay']).source = "file://" + file.nativePath;
            VideoDisplay(this['videoDisplay']).load();
            break;
        }
        ...以下略
    }
}

 これでVideoDisplayクラスにパスを渡すことが出来ました。

 なお、今回はevent.argumentsに渡ってくる配列から、先頭だけshiftメソッドで取り出していますが、これをイテレータ処理してやれば、複数選択したFLVをプレイリストにして連続再生なんてことも出来ます。

TRACKBACK

このブログ記事を参照しているブログ一覧: AIRアプリで特定のファイルフォーマットのファイルを開く方法

このブログ記事に対するトラックバックURL: http://blog.s2factory.co.jp/MT/mt-tb.cgi/33