2013年7月25日木曜日

Adobe Flash で動画再生

自分で撮影した動画ファイルをネット上で見れるようにするならYouTubeにアップするのが簡単ですが、
あまり公開したくないならAdobe Flashで再生できるようにするのが簡単です。
もちろんFlashに対応している機器でしか再生できませんが。

まずは動画ファイルを変換する必要があります。
例えばLUMIX GF5で撮影したようなAVCHD形式の動画ファイルなら、
Full Video ConverterでFLV形式に変換できます。
[File]-[Add File(s)]メニューで"00001.MTS"のような動画ファイルを選択し、
画面下の[Profile]ドロップダウンリストで[General Video Format]の[FLV]を選択し、
その[Edit]ボタンを押してビデオの画素数を指定した上で、
[Actions]-[Convert Checked Item(s)]メニューを実行すれば、
[Destination]に設定したディレクトリにFLV形式のファイルが作成されます。
以下このファイルを"movie.flv"とあらわします。

それではFlashで先に作成したFLVファイルを再生してみましょう。
先日紹介したFlashDevelopを立ち上げます。
[Project]-[New Project]メニューで開くダイアログボックスで、
[ActionScript 3]-[AS3 Project]を選んで[Name]テキストボックスに
プロジェクトの名前を適当に入力し[OK]をクリックします。ここでは名前を"movie"にすることにします。
必要なら[Create dirctory for project]のチェックを入れておきます。
[Project]ペインに作成したプロジェクトの構成要素が表示されるはずです。
"src/Main.as"がメインのソースコードとなるのでこれを開きます。
元の内容は
package 
{
 import flash.display.Sprite;
 import flash.events.Event;
 
 /**
  * ...
  * @author ---------
  */
 public class Main extends Sprite 
 {
  
  public function Main():void 
  {
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }
  
  private function init(e:Event = null):void 
  {
   removeEventListener(Event.ADDED_TO_STAGE, init);
   // entry point
  }
  
 }
 
}
なかんじのはずなので、ちょっと追加して以下のようにします。
package 
{
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.AsyncErrorEvent;
 import flash.events.NetStatusEvent;
 import flash.events.SecurityErrorEvent;
 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;

  public function Main():void 
  {
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }
  
  private function init(e:Event = null):void 
  {
   removeEventListener(Event.ADDED_TO_STAGE, init);
   // entry point

   netConnection = new NetConnection();
   netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
   netConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
   netConnection.connect(null);
  }
  private function connectStream():void
  {
   var netStream:NetStream = new NetStream(netConnection);
   netStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
   netStream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
   
   var video:Video = new Video();
   video.attachNetStream(netStream);
   netStream.play(videoURL);
   addChild(video);
  }

  private function netStatusHandler(event:NetStatusEvent):void
  {
   switch (event.info.code) {
    case "NetConnection.Connect.Success":
     trace("connectStream");
     connectStream();
     break;
    case "NetStream.Play.StreamNotFound":
     trace("Unable to locate video: " + videoURL);
     break;
   }
  }

  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"と同じ)ディレクトリにコピーし、
binディレクトリ以下を丸ごと(実際は"movie.swf"と"movie.flv"だけでよい)ウェブサーバに置き、
ウェブブラウザから"index.html"(または"movie.swf")にアクセスすれば動画が再生されます。
もちろんFlashプラグインがインストールされたウェブブラウザである必要はあります。
動画ファイルのありかはソースコード中の
private var videoURL:String = "movie.flv";
で指定しているので画像だけ別のサーバに置いているなら、
private var videoURL:String = "http://<サーバ名gt;/<ディレクトリ名gt;/movie.flv";
のようにURLとして指定してビルドしなおせば実現できます。

0 件のコメント:

コメントを投稿