lighttpd で Flash Video (.flv) をストリーミング配信 (2)
前回の記事「lighttpd で Flash Video (.flv) をストリーミング配信」で、とりあえずストリーミング配信できることは書いた。今回は Flash の動画配信について調査したまとめ。
How much?
一番気になっていたのは、あの馬鹿高い「フラッシュなんちゃらサーバ」を購入しないとあかんの? というところでしたが、yuin さんがコメントしてくれた情報で解決しました。
結論からいえば、みんなの大好きな lighttpd でストリーミング配信ができる。
まあ、要するにタダだよ、と。
動画フォーマット
まず、動画フォーマットは Flash Video (``.flv``) になる。 これについては、.mpeg や .mov からの変換ツールがごろごろあるはずなので詳細は割愛。
とりあえず、リンクだけ。
Flash Player の事情
クライアント (Flash Player) 側では、NetConnection でサーバに接続する。そして、その接続から NetStream インスタンスを生成し、これを Video インスタンスに attachVideo() することで .flv の再生が可能になる。
var nc:NetConnection = new NetConnection();
nc.connect(null); // initialize
var stream:NetStream = new NetStream(nc);
var video:Video = new Video(300,300);
...
video.attachVideo(_ns);
Flash Player 6 では、肝心の NetConnection が RTMP (Real Time Messaging Protocol) という Adobe (Macromedia) 独自のプロトコルのみサポートしていたため、フラッシュなんちゃらサーバでしかストリーミングができなかった(このへんは Flash MX 関連のドキュメントにあった記述から推測したもの。ちなみに、RTMP の仕様は非公開)。
Flash Player 7 以降
しかし、Flash Player 7 以降では NetConnection が HTTP による接続をサポートするようになったため、サーバ上の .flv に HTTP でアクセスするだけでストリーミング(っぽい)再生が可能になった。
本来のストリーミングに比べて、この方式は以下の欠点がある(他にもあるかも)。
- 頭からの再生しかできない
- そのままだと、リモートの .flv を直接ダウンロードできちゃう
- クライアントのローカルディスクにキャッシュされちゃう
lighttpd
そこで lighttpd ですよ。
lighttpd には 1.4.11 から mod_flv_streaming という、そのものズバリのモジュールが用意されてまして、こいつを使うと、さきほどの欠点の 1. を克服して、任意の場所から再生が可能になる。
必要な設定は、
server.modules = ( "mod_flv_streaming" ) flv-streaming.extensions = ( ".flv" )
こんだけ。
仕組みも単純。 クライアント側では、URL のクエリー文字列に start パラメータを追加。これで開始位置を指定してもらい、サーバ側では指定された位置のデータを返すようになっています(そのため、start パラメータによる位置指定をプレイヤー側で実装する必要がある)。
- lighttpd: チュートリアルとサンプル
- Using Lighttpd, Mplayer/Mencoder and Flvtool2 to Implement Flash Video Streaming
- flv streaming with lighttpd
- The Flash Video Resource: ‘Streaming’ flv video via PHP, take two
また、mod_secdownload を併用することで、欠点 2. の「直接 .flv をダウンロードされる」も克服できる。
欠点 3. が残っているとはいえ、設定も簡単だし、魅力的な選択肢なのは間違いない。
lighttpd で Flash Video (.flv) をストリーミング配信
以前の記事「Flash で動画をストリーミング再生」で yuin さんにコメントで教えてもらった情報:
あと配信に関しては http://blog.kovyrin.net/2006/10/08/lighttpd-memcoder-flvtool-for-streaming/ http://blog.lighttpd.net/articles/2006/03/09/flv-streaming-with-lighttpd あたりはどうでしょう。
- Using Lighttpd, Mplayer/Mencoder and Flvtool2 to Implement Flash Video Streaming
- flv streaming with lighttpd
- The Flash Video Resource: 'Streaming' flv video via PHP, take two
で、とりあえず、lighttpd で .flv のストリーミング配信に成功(yuin さん、ありがとう!)。プレイヤーやら .flv やらはこちらのをそのまま使っているです。
リンク先にも書いてあるように、擬似的なストリーミング配信(実際には、ただの HTTP によるダウンロード)なんだけど、普通に配信するぶんには困らないと思う。開始フレームを URL の start パラメータで指定するので、プレイヤー側の対応も必要、ってとこくらいかな。
今日はもう眠いので、詳しくはまた後日。
Flash で動画をストリーミング再生
Flash で動画をストリーミング再生する方法について調査したときのメモ。
- Flash Player 6 以降
- ストリーミング用のファイルは .flv
- .mpeg や .mov を .flv に変換して使う
- Flash MX や Flash Professional で変換
- たぶん、フリーの変換ソフトが転がってると予想
- 配信
- Flash Media Server 2 が必要?
- プロトコルは RTMP (Real Time Messaging Protocol)
- オープンソースの Flash サーバ Red5
- RTMP は Adobe (Macromedia) 独自のプロトコルで、仕様は公開されていない。
- Red5 の人たちは頑張って解析しているようだ。Web サイトに仕様についての情報もある。
やっぱり配信部分がネックだなあ。Red5 は動画配信するだけにはオーバースペックな気がするし。。