2012年3月4日日曜日

FlvデータをFlashPlayerに送り届ける話。

前回の記事でNetStream.appendBytesについてちょこっとだけ書きましたが、Flvデータをガンガンおくってやれば、映像を流すことができます。

んで流す方法の話。
まず僕が興味をもったのは、Rtmfpをつかう方法
rtmfpでもFlashのストリームを流すことができますが、Flashが吐き出すデータに限られます。これだとFlash以外のソース(FMEとか)での配信がながせず、映像は残念なものになります。
そこでデータの送信を独自に作成し、appendBytesをつかってデータを再生してやれば綺麗な映像を安定して流すことができます。
やってみた方法は
1:Red5サーバーにデータを流す。
2:そのデータをバイトデータとしてrtmpメッセージとして送り返す。
3:rtmpメッセージをrtmfpのネットワークで共有する。
4:うけとったクライアントはそれぞれ映像をappendBytesで再生する。
というやりかた。

rtmfpのnetGroupで共有すればいいかなと思ったんですが、netGroupの共有ではデータの送信が間に合いませんでしたので、netStreamのデータ通信でやりとりする形に変更してやってみました。実験段階では、問題なく動作し、なんかいかGlobal経由での実験も特に問題なく成功。
問題はnetStreamのNodeの管理が煩雑になりすぎて、飽きましたw。

つづいて興味をもったのはhttpを使う方法。
URLLoaderをつかってapacheサーバーからデータをガンガンもらって動作させるというやり方。
上記のp2pと動作は基本的に同じ
1:Red5サーバーにデータを流す。
2:そのデータをfthファイルとftmファイルに分解してhttpでダウンロードできるように変更。
3:プレーヤーは各自ダウンロードをし、appendBytesで再生する。
というやり方。

こちらも実験では問題なく動作し、Global経由での実験も特に問題なし、まぁ、つくったFlashプログラムのダウンロードタイミングにちと問題があって、再生が微妙につまったりしましたが、そこもなんとかしました。
これが今回のHttpTakStreamingでのやり方です。
ただ、Flash側からアクセスしなければいけなく、メッセージができ次第pushするわけではないのでどうしても遅延が大きくなる傾向があります。

0 件のコメント:

コメントを投稿