サーバーAでやっているメディアデータをサーバーBにつないでも見ることができるというものです。
これでサーバーの接続を複数のサーバーにわけることができるので1つの配信を多人数に提供することができる。というものです。
これを今回実装してみました。
まぁRed5にもclusterの方式はあって、こちらはmrtmpという独自の通信プロトコルをつかって映像音声だけでなく内部の命令もミラーしてしまうので、正直こちらの方が使い勝手は上なのですが、Red5 0.9.0以降ではメンテナンスがされていなかったらしく、動作させるにはconfの中の設定をいじったり、場合によっては大本のプログラムの修正が必要になります。
以前1.0.0 RC1で実験しようとしたときにはうまく動作させられませんでした。
またこの方式ではシステムをすべてoriginに頼ることになるので、メディアを利用しないサーバーではあまり意味がありませんでした。
幸いRed5にはRTMPClientというFlashプレーヤーと同じように他のRtmpサーバーに接続しにいってデータのやりとりをするというクラス群が存在するので、これを利用してなんとかすることにしました。
僕のつくったliverepeaterの強みは
・純粋なRtmpクライアントとして接続させているので、接続する先のサーバーはRed5でもWowzaでも(FlashMediaServerでも:これは未検証)接続して動作すること。
・子世代だけでなく、何世代でも再接続させることが可能なこと
(A←B←C←D←Eの接続はテスト済み)
の2つですね。
基本的にはred5-web.xmlのweb.handlerのところにpropertyとして接続しにいくサーバー、ポート、アプリケーションを設定すれば、データの通信を行います。
関数のデータのやりとりまわり。xuggleから流用したBroadcastStreamまわりの実装。
について数回にわけてブログにこんなことで苦労したと書ければと思ってます。
0 件のコメント:
コメントを投稿