2012年2月24日金曜日

自前でhttpのstreamingをつくってみました。その1

 fmsやwowza、red5等によるrtmpのストリーミングはスケーリングを実行するのが非常に面倒です。そこでapacheサーバーからデータを流すことでライブストリーミングをつくってみようと思いました。
1週間ほど、帰宅してからちまちま作っていたのですが、ついになんとか仮動作できたので報告したいと思います。


今回の動作はiMac上でManyCam -> FME -> red5 -> apache -> Flashという流れで動作させてます。
上の図の左がキャプチャ元時計、真ん中が今回つくったHttpStreamingの画像、右がRed5のデモアプリでのrtmp経由の画像となります。

遅延9秒か・・・rtmpが遅延3秒だからやっぱ5秒くらいまでには押さえたいところですがどうなんだろうか・・・

遅延の原因は
・FMEの変換効率1秒程度
・ファイルの生成キャッシュ(3秒)
・apacheサーバーへのデータ転送(0.1秒)
・生成有無の確認1秒おき(最悪で遅延が1秒になる計算)
・再生プレーヤー上のバッファタイム(2秒)

その他の要因も加味すると8秒くらいかな

バッファタイムを0にして(ファイルがそもそもバッファリングしてるみたいなものだからいらないと見た)キャッシュサイズを小さくすれば、5秒くらいに落とせるだろうか。
あまりに細切れにしすぎるとapacheが死ぬかな・・・
206レスポンスとかうまくつかえればもっとキャッシュサイズは大きめでも送信効率あがるかも。
等々いろいろ考えてます。

ではでは。

追記:netStreamのBufferTimeを0にしてみた。
ぎり5秒かな。
左から順に、オリジナル、放送用publisher、視聴用publisher(rtmp)、httpStreaming経由となっています。実際の動作では、最速で5.7秒くらいの遅延。アクセスするタイミングに左右されるので7秒くらいずれることもありました。ローカルの環境での実験なのでものすごくはやいですが、GlobalのIP経由で実験したらたぶんもっと遅延が目立つかもしれない。
今回はManyCam -> flash(flv) -> red5 -> apache -> Flashでやってみた

ではでは

0 件のコメント:

コメントを投稿