preload
1月 24

(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 ベースの動画配信環境についての実験でした。

参考:

Tagged with:
11月 04

Adobe MAX Japan 2007に行ってきた

ActionScript コメントは受け付けていません。

adobe 主催の、日本では初開催というイベント@ホテル日航東京

全体を通じての感想。

  • 来場者はスーツの人が多かった気がする。ちょい意外
  • sneak peek をはじめ、2日目のカジノとか、運営から、adobe の面白いカルチャーを垣間見ることができた気がする
  • いろんなクリエイタの人たちと交流できて、自分は IT いろいろやってるけど、これといってコンテンツが無いなあ、と危機感
  • RIA とか(言葉の定義すらよくわかってなかった)、まだとんがったモノだと思ってたけど、すぐにフツーな技術になる予感。で、そのフツーなモノを、まだモノにできてない自分に危機感
  • とにかく、クリエイティビティとモチベーションと物欲を刺激された2日間でした

予定調整が遅くなってしまい、申込が遅れてしまったので、見たいセッションはほとんど満席になってしまっていた。見られたセッションについてメモを残しておく。なお、講演で聞き取ったことをベースにしただけで、ちゃんと裏を取っていません。間違い等あったら、コメントとかメールで教えてください。長くなってしまったので、めったに使わない 続きを読む でどうぞ。

Continue reading »

Tagged with:
5月 22

JS/AS/Flash関連の勉強会に行ってきた

JavaScript コメントは受け付けていません。

amachangさんの声がけで集まった勉強会に行ってきました。

いやー、濃い濃い。

正直、ついていけたのは、SWFのバイトコードの話だけでした。これはこれで偏ってるな..(^^;; たまたま最近いろいろいじる機会があったので、僕もTAKESAKOさんバリに、白紙にHEX-BIN変換メモ&SWF読み下しの日々が続いていたのです。DefineShape4とか、PlaceObject3とか、読んでると死にますよねw
しかし、yossyさんが言ってた「ActionScriptだと書けない処理をバイトコードで実装する」ってアプローチは目からウロコ。最適化だけじゃないんですねー。建設的なアイデア!(そっちのほうが自然なアプローチなのかも??)
ともかく、ご興味の方、とりあえずAdobeが出してるspecのbasic data typeを理解して、headerだけでも読んでみては。バイトコードって最初は手を付けづらいけど、丁寧に読むと、ちゃんと挙動が理解できるから楽しいですよ!

しかし、勉強会で出たネタ、「とりあえず、試そう!」と思ったモノが多すぎる。環境作りから必要なのもあるけど、少なくとも↓は、ちゃんといじるぞ。

  • Apolloとニコニコプレゼン
  • RubyCocoa
  • Progression

あ、Firebugのソース読みもやろう!
あ、fladdictさんの書いたアレも読む!
.. って、こんなにやれるのかな、ほんとに。

とにかくとにかく、いろんな方にお会いできて楽しかったです!amachangさん、お誘いありがとうございました (_ _) 皆さんとお話できませんでしたが、これからもどうぞよろしくおねがいします。

Tagged with: