社内でアルファチャンネル付きの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をプレイリストにして連続再生なんてことも出来ます。