Wowza Media Serverの使い方(入門編)

2008.02.13 / actionscript

Flash Media Serverの(ほぼ)完璧なクローンとして、Wowza Media Serverというものがあります。元Adobe(しかもFMS担当だった気が)の社員がスピンアウトして立ち上げたもので、Javaで書かれていてMacでも動いたり、614,250円払わなきゃオリジン、エッジサーバの構成ができないFMSと違って$995で全てがそろってしまうナイスなストリーミングサーバです。詳細な違いは糸柳さんが詳しい説明を書いてくださっているので、そちらが大変参考になります。

ちなみに同じくFlashのストリーミングサーバでオープンソース版でRed5もありますが、以前のエントリーのとおり、FlashPlayerのバージョンで動作が異なったり、SharedObjectの挙動が怪しいときがあったりと、まだまだ安定さは欠ける模様です。

Wowza Media Serverのインストール

このWowza Media Serverですが、インストール方法は非常に簡単です。Windowsならインストーラに従って進めるだけ。Linuxは実行権限を追加して、自己解凍形式ファイルを実行するだけです。僕はcoLinux上のFedora7に入れてみました。

  sudo chmod +x WowzaMediaServerPro-1.3.3.rpm.bin
  sudo ./WowzaMediaServerPro-1.3.3.rpm.bin
  

/usr/local/WowzaMediaServerPro-1.3.3にインストールされてあるので、binに移動してライセンスキーを入力します。ライセンスキーは試用版の場合は利用許諾書に同意してメールアドレスを登録することで、取得することができます。

  cd /usr/local/WowzaMediaServerPro/bin
  ./startup.sh
  (ここでライセンスキーを入力)
  

起動スクリプトの設定

その後、chkconfigでサービスに登録しておくと便利です。

  sudo /sbin/chkconfig --level 345 WowzaMediaServerPro on
  

こうしておくと、httpdやmysqldと同じようにinit.dスクリプトに追加されます。

  sudo /etc/init.d/WowzaMediaServerPro (start|stop|restart)
  

アプリケーションの作り方

ActionScriptでストリーミングサーバに接続するためには、Wowza Media Server側でアプリケーションの設定を行います。アプリケーションをここで「tv」とすると、ディレクトリの構成は次のようになります。

  WowzaMediaServerPro/
   -applications/tv
   -conf/tv/Application.xml
  

application/tvのtvディレクトリは空でOKです。ディレクトリを作成するだけでアプリケーションとして認識されます。また、conf/tv/のApplication.xmlは、conf/Applicatioin.xmlをコピーしたものです。一点注意する点として、アプリケーションの種類によってStreamのタイプを編集する必要がある点です。たとえば、ライブ系アプリケーションだと次のように編集します。

  <Streams>
    <StreamType>default</StreamType>
    <StorageDir>${com.wowza.wms.AppHome}/content</StorageDir>
  </Streams>
  

  <Streams>
    <StreamType>live-lowlatency</StreamType>
    <StorageDir>${com.wowza.wms.AppHome}/content</StorageDir>
  </Streams>
  

と編集します。StreamTypeが適したものでないと、swfがまともに動かないので要注意です。基本的にライブ系アプリだと「live-lowlatency」, オンデマンドストリーミングの場合は「file, default」と、しておけば大丈夫だと思います。詳しい仕様はこちらで確認できます。また、ここで設定したアプリケーションtvは次のURLでアクセスすることができるようになります。

rtmp://server-address/tv

ActionScript3でテストコード

折角なのでActionScript3でテストコードを書いてみます。ざっと書くとこんな感じになります。

  package{
  
      import flash.display.Sprite;
      import flash.net.NetConnection;
      import flash.net.NetStream;
      import flash.net.ObjectEncoding;
      import flash.events.NetStatusEvent;
  
      public class Player extends Sprite {
          
          private var nc:NetConnection;
  
          public function Player(){
              this.nc = new NetConnection();
              this.nc.addEventListener(NetStatusEvent.NET_STATUS, this.onNetStatusListener);
              this.nc.objectEncoding = ObjectEncoding.AMF0;
              this.nc.connect('rtmp://localhost/tv');
          }
              
          private function onNetStatusListener(evt:NetStatusEvent):void{
              var code:String = evt.info.code;
              if(code == "NetConnection.Connect.Success"){
                  log("Success to connect to RTMP Server");
              
              } else if( code == 'NetConnection.Connect.Closed'){
                  log("Close Connection");
                  
              } else {
                  log("Failed to connect to RTMP Server");
              }
          }   
      }
  }
  

これを「Player.as」で保存して「mxmlc Player.as」でコンパイルすると接続テスト用swfが出来上がります。また、これを作るにはlog関数をあらかじめセットアップしておく必要があります。log関数についてはこちらを参照ください。

一点、注意しなければいけない点としてNetConnectionのエンコード方式をAMF0にしなければいけない点です。ActionScript3になってからAMF3形式が利用可能になっているはずなのですが、Wowza Media Serverと接続を行うときは、ここのエンコード方式を明示的に指定しておかないと、接続に失敗してしまいます。