lighttpd で Flash Video (.flv) をストリーミング配信 (2)

前回の記事「lighttpd で Flash Video (.flv) をストリーミング配信」で、とりあえずストリーミング配信できることは書いた。今回は Flash の動画配信について調査したまとめ。

How much?

一番気になっていたのは、あの馬鹿高い「フラッシュなんちゃらサーバ」を購入しないとあかんの? というところでしたが、yuin さんがコメントしてくれた情報で解決しました。

結論からいえば、みんなの大好きな lighttpd でストリーミング配信ができる。

まあ、要するにタダだよ、と。

動画フォーマット

まず、動画フォーマットは Flash Video (``.flv``) になる。 これについては、.mpeg.mov からの変換ツールがごろごろあるはずなので詳細は割愛。

とりあえず、リンクだけ。

  • FFmpeg .flv に変換。
  • FLVTool2 .flv を操作。メタデータ追加など。

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 でアクセスするだけでストリーミング(っぽい)再生が可能になった。

本来のストリーミングに比べて、この方式は以下の欠点がある(他にもあるかも)。

  1. 頭からの再生しかできない
  2. そのままだと、リモートの .flv を直接ダウンロードできちゃう
  3. クライアントのローカルディスクにキャッシュされちゃう

lighttpd

そこで lighttpd ですよ。

lighttpd には 1.4.11 から mod_flv_streaming という、そのものズバリのモジュールが用意されてまして、こいつを使うと、さきほどの欠点の 1. を克服して、任意の場所から再生が可能になる。

必要な設定は、

server.modules = (
  "mod_flv_streaming"
)
flv-streaming.extensions = ( ".flv" )

こんだけ。

仕組みも単純。 クライアント側では、URL のクエリー文字列に start パラメータを追加。これで開始位置を指定してもらい、サーバ側では指定された位置のデータを返すようになっています(そのため、start パラメータによる位置指定をプレイヤー側で実装する必要がある)。

また、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 あたりはどうでしょう。

で、とりあえず、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 は動画配信するだけにはオーバースペックな気がするし。。

  1. 1
  2. 2
(8 記事)

Want fries with that?

Open Source Projects