2013年7月30日火曜日

Adobe AIR で動画再生

先日Adobe Flash で動画再生する方法について書きましたが、今度はAIRです。
まあAIRはFlashプログラムを独立したアプリケーションとして動かすだけなので、
そんなには変わりません。

FlashDevelopを立ち上げ、[Project]-[New Project]メニューで開くダイアログボックスで、
[ActionScript 3]-[AIR AS3 Projector]を選んで[Name]テキストボックスに
プロジェクトの名前を適当に入力し[OK]をクリックします。ここでは名前を"movie"にすることにします。
必要なら[Create dirctory for project]のチェックを入れておきます。
[Project]ペインに作成したプロジェクトの構成要素が表示されるはずです。
"AIR_readme.txt"は一読したほうがいいでしょう。
"src/Main.as"がメインのソースコードとなるのでこれを開きます。
元の内容は
package 
{
 import flash.display.Sprite;
 
 /**
  * ...
  * @author ---------
  */
 public class Main extends Sprite 
 {
  
  public function Main():void 
  {
   
  }
  
 }
 
}
なかんじのはずなので、ちょっと追加して以下のようにします。
package 
{
 import flash.display.Sprite;
 import flash.events.*;
 import flash.media.Video;
 import flash.net.NetConnection;
 import flash.net.NetStream;
 
 /**
  * ...
  * @author ---------
  */
 public class Main extends Sprite 
 {
  private var videoURL:String = "movie.flv";
  private var netConnection:NetConnection;
  private var stream:NetStream;

  public function Main():void 
  {
   netConnection = new NetConnection();
   netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
   netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
   netConnection.connect(null);
  }
  private function netStatusHandler(event:NetStatusEvent):void
  {
   switch (event.info.code) {
    case "NetConnection.Connect.Success":
     connectStream();
     break;
    case "NetStream.Play.StreamNotFound":
     trace("Unable to locate video: " + videoURL);
     break;
    case "NetStream.Play.Stop":
     stream.play(videoURL);
     break;
   }
  }

  private function connectStream():void
  {
   stream = new NetStream(netConnection);
   stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
   stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
   var video:Video = new Video();
   video.attachNetStream(stream);
   stream.play(videoURL);
   addChild(video);
  }

  private function securityErrorHandler(event:SecurityErrorEvent):void
  {
   trace("securityErrorHandler: " + event);
  }

  private function asyncErrorHandler(event:AsyncErrorEvent):void
  {
   
  }
 }
 
}
これで[Project]-[Build Project]メニューを実行すれば、
"bin/movie.swf"ができているはずです。
動画ファイル"movie.flv"を"bin"("movie.swf"と同じ)ディレクトリにコピーし、
"Run.bat"を実行すればデバッガが立ち上がって動画再生が始まります。
もっとも動画ファイルのありかはソースコード中の
private var videoURL:String = "movie.flv";
で指定していて、相対パスや絶対パスで指定できます。
ただし、相対パスで親ディレクトリを示す".."が使えないようで、
ディレクトリツリーをさかのぼる指定はできません。
どうしても必要なら絶対パスで指定することになります。
ディレクトリの区切りは"\"(円マーク、またはバックスラッシュ)ではなく"/"を使う必要がありますが、
Windowsのドライブ指定は通常通り"c:"の形式で指定できます。
もちろんどこかにコンテンツサーバを立ててそこに置きたければ、
private var videoURL:String = "http://<サーバ名>/<ディレクトリ名>/movie.flv";
のようにURLとして指定してビルドしなおせば実現できます。

デバッガではなく単独で動作させたい場合は、
あらかじめ一度だけ"bat/CreateCertificate.bat"を実行しておいてから
"PackageApp.bat"を実行して"air/movie.air"を作成します。
ただし、これは実行可能ファイルではなくインストーラのデータに過ぎません。
AIRのランタイムをインストールしていると
関連付けされてこのairファイルが実行できるようになるので実行するとインストールでき、
無事単独アプリケーションとして実行できるようになります。
アンインストールするには通常のWindowsアプリケーションと同様に
[コントロールパネル]の[プログラムの追加と削除]や[プログラムと機能]から行います。

0 件のコメント:

コメントを投稿