(2008/01/29 追記: 下記の内容は 2008/01 下旬より公開されている FMS-3.0 developer edition でも同様に利用できる事を確認しました。H.264 のストリーミングはまだ試してません。)
post 忘れてた。正月に前々から触ってみようと思ってた Flash Media Server 2 (FMS) をいじっていたので、そのときのメモ的な何か。まずは Ubuntu-7.10 に FMS を突っ込んで、FLV をストリーミング再生するところまで。
FMS は Adobe が提供しているメディアストリーミングサーバ。平たく言うと RTMP というプロトコルを喋るサーバ。開発/検証目的、非商用であれば、接続数に制限のある developer edition が無償で利用できる。詳しくは本家のライセンス参照。ちなみに、そろそろ、FMS3 の developer edition が出てきそうなので、そうなると、この情報は古いものになるかも。(2008/01/29 追記: このエントリの範囲であれば、そのまま利用できます。バージョン番号やファイル名は適宜読み替えてください。)
まずは adobe から FMS2 の developer edition (linux) をダウンロードしてきて、伸張、インストールスクリプトを実行。
$ tar xzf FlashMediaServer2.tar.gz $ cd FMS_2_0_3_r68_linux $ sudo ./installFMS ERROR: Your distribution, unknown, is not supported by this Macromedia Flash Media Server installer.
対象環境(Redhat) じゃないからダメって怒られた。とりあえず、無理矢理入れるオプションでもないかインストールスクリプトを眺めてみる。–platformWarnOnly ってオプションを発見。
$ sudo ./installFMS -platformWarnOnly WARNING: Your distribution, unknown, is not supported by this Macromedia Flash Media Server installer. : To install Macromedia Flash Media Server now, press ENTER. To cancel the installation at any time, press Control-C.
なんか動いてるぽい。以降、適当に聞かれる項目に答えていけばインストール完了。owner とか実行権限は apache とかと同じになるように変更した。設定した項目のサマリは次のとおり。(以下、インストールディレクトリを ${FMSROOT} と表記。)
----------- Install Action Summary ----------- directory = ${FMSROOT} FMS Server Port = 1935 FMS Admin Server Port = 1111 Administrative username = fms Administrative password = (suppressed) FMS owner = www-data FMS service user = www-data FMS service user group = www-data FMS run as daemon = Yes Start FMS = Yes
なお、この辺りは設定は ${FMSROOT}/conf 以下に xml 形式で保存されているので、後でも変更可能。インストールした FMS は、
$ sudo /etc/init.d/fms start
これで起動できる。さて、同梱されている ${FMSROOT}/fms2_console.htm を使うと管理画面に接続できるらしい。
${FMSROOT}/fms2_console.swf と一緒に適当な場所に置いて、ブラウザでオープン。fms サーバのアドレスと administrative username/password を入れて接続。おや、繋がらない。起動してないのかな??ログも何も出てないから分からん。/etc/init.d/fms を追って、起動プロセスを確認してみる。${FMSROOT}/server start -silent で実行してるみたい。これを直接呼んでみよう。
$ sudo ${FMSROOT}/server start ulimit: 13: Illegal option -u [: 16: 32768: unexpected operator NPTL 2.6.1 ./server: 49: Syntax error: Bad substitution
Bad substitution らしい。該当の箇所はココ。
48: # if tmpdir doesn't end in a slash, add one 49: lastchar=${tmpdir:${#tmpdir}-1:1}
コロン)で書いてる変数の展開辺りが怪しいな。bash では使えたと思ったけどな.. と思って、ファイルの頭を見たら
1: #!/bin/sh
おや、
$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 2007-05-05 18:28 /bin/sh -> dash
む、dash 環境だったのか (^^; dash はコロンを展開してくれないのかしらん。試しに server と、あと adminserver の一行目を
1: #!/bin/bash
と書き換えてみる。$ sudo ${FMSROOT}/server start 。お、うまく起動してるぽい。今度こそ fms2_console.htm から接続.. お、それっぽい画面が出た!
では、適当な動画をストリーミング配信してみる。配信素材は、ごにょごにょして入手した flv 。FMS は ${FMSROOT}/applications ディレクトリ以下をアプリケーションと認識するので、ここに個々のアプリケーションディレクトリを作成していく。今回はストリーミング配信テスト用のアプリケーションを作成するので、こいつを stream_test とする。
$ cd ${FMSROOT}/applications $ mkdir stream_test
アプリケーションディレクトリ以下で、FMS はインスタンスという実行単位を持つ。クライアントは、アプリケーションを利用するときにインスタンス名を指定する事ができるし、インスタンスが無い場合は、FMS にデフォルトのインスタンス名でインスタンスを生成させる事もできるし、あらかじめいくつもインスタンスを作っておく事もできる。この辺りの構成がスケールアウト時の処理分散に効いてくるのだろう。ここでは、inst という名前でインスタンスを作成。
$ cd ${FMSROOT}/applications/stream_test $ mkdir inst $ mkdir -p streams/inst
こんな感じで、stream_test 直下にインスタンス名のディレクトリと streams/<インスタンス名> のディレクトリを掘る。FMS はサーバサイドでのスクリプト実行をサポートするが、今回の命名のケースだと、${FMSROOT}/applications/stream_test および ${FMSROOT}/applications/stream_test/inst にアプリケーションスクリプト、${FMSROOT}/applications/stream_test/streams/inst 以下にストリーミング配信する素材を設置していく事になる。今回は video.flv を ${FMSROOT}/applications/stream_test/streams/inst へ設置した。
サーバサイドの設定は、もう 1 ステップあるのだが、次に Flash IDE を用いて、動画視聴用のアプリ(swf) を作成する。今回は CS3 を利用。体験版でも OK。
[ファイル]-[読み込み]-[ビデオの読み込み] で、[Web サーバー、Flash ビデオストリーミングサービス、または Flash Media サーバーに展開済み] リソースの URL として、設置した video.flv の URL を指定する。今回の場合、rtmp://<FMSサーバアドレス>/stream_test/inst/video.flv となる。streams ディレクトリを指定する必要はない。URL を指定したら視聴用 swf のテンプレートを適当に選べば、swf のベースができる。このままでも良いし、好きなようにデザインを入れてもよし。できあがったら、保存 - パブリッシュして、生成された swf やら js, html ファイルを http アクセスできる箇所へ運ぶ。作成した swf を stream_test.swf とする。
さて、これらのテンプレートは、FLVPlayback と呼ばれるコンポーネントを利用しているので、こいつが話し相手になるサーバサイドスクリプトが必要になる。これは Flash 8 の IDE には付いていたらしい(CS3 にもあるらしい)が、僕のインストール環境には見つからなかった。Flash Media Server Developer Center から辿っていって、サンプルをようやく発見 (ここまでたどり着くのに大変だった..)。この Samples.zip を伸張して得られる、Samples/ComponentsAS2/FLVPlayback/main.asc が目的のものになる。これをサーバ側に設置。最終的なサーバ側のファイル配置は次のようになる。
${FMSROOT}/applications/stream_test/ |- main.asc |- inst/ |- streams/ |- inst/ |- video.flv
htdocs/ |- AC_RunActiveContent.js |- stream_test.swf |- stream_test.html |- SkinOverPlayMuteCaptionFull.swf
これで、htdocs 以下の stream_test.html にブラウザでアクセスすれば、FMS への接続後、ストリーミング再生が確認できる。再生中に fms2_console.htm で管理画面を確認すれば、接続数やら配信レートやらも確認できる。以上、おわり。
余談だが、こうやっていじっていくなかで、システムアーキテクチャを掴み、サーバサイドでのアプリケーション定義方法やらインスタンスの概念やらを見ながら、プラットフォームの設計思想を想像していくのは、なかなかに面白い。去年 Adobe MAX に行ったときにあまり分からなかったところも、ちょっとは理解できるようになったかな〜。
この後、VLC やら ffserver とかの配信環境の実験もやってみた。そっちは気が向いたらまとめる。
ケータイにも FlashLite 3.0 が載ったし(FLV 今んとこダメだけど)、今年は、ケータイでの動画視聴がもっと盛り上がってくると思うんだな〜。というわけで、PC でもだいぶシェアが高いし、恐らくケータイでも動画配信プラットフォームの本命になっていくであろう Flash ベースの動画配信環境についての実験でした。
参考:
最近のコメント