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と接続を行うときは、ここのエンコード方式を明示的に指定しておかないと、接続に失敗してしまいます。