RTMFP の続きです。今回は、RTMFP の接続の仕組みと Stratus の簡単な説明です。
RTMFP の接続
到達可能な IP ネットワークにさえつながっていれば、P2P の接続に必要なのは、通信相手の IP アドレスだけです。(ポート番号も要りますね)
ただ、P2P ではどのように相手の IP アドレスを知るか、ということが大きなポイントになります。大抵のクライアントには DNS 経由でたどり着くことは現実的でないですし、また、そもそもクライアントの IP アドレスは固定されているとは限りません。。。
そこで RTMFP では以下のような手順で接続が行われます。(前回書いたように RTMFP クライアントには識別用のユニークな ID が割り振られています)
- 通信したいクライアントの ID を取得
- 取得した ID に該当するクライアントの IP アドレスを取得
- 取得した IP アドレスに対して接続要求を送信
見てのとおり、このステップの実現には 2 つの壁があります。"クライアント ID の取得" と、その "ID に対応する IP アドレスの取得" です。
1 つ目の "相手クライアント ID の取得" については、その仕組みが RTMFP の中では用意されていません。FMS のサーバーサイド ActionScript を使うなどして別途提供する必要があります。(Flash Player 10.1 からはオーバーレイネットワークの導入によりこの手間は緩和されています)
2 つ目の "ID に対応する IP アドレスの取得" については、どこかでクライアント ID と IP アドレスの対応表を管理する必要があるのですが、RTMFP ではこれをサーバーに持たせることになっています (いわゆるハイブリッド P2P)。
そこで Stratus や FMS の登場となるわけです。
Stratus と FMS
Stratus (Stratus@Labs) は現在ベータ 2 が Adobe Labs にホスティングされている RTMFP 用のランデブーサービスです。RTMFP クライアントから他のクライアントへの接続を仲介 (ランデブー) します。
Stratus は FMS と比べていろいろと欠けている機能があります。
例えば Stratus では FMS と違って、シェアードオブジェクト (RSO) とサーバーサイド ActionScript が使えません。そのためクライアント ID を交換するためのロジックをサーバー側に実装することができません。接続時に Stratus が提供するのは、既に ID が判明している相手への接続情報だけです。
また、Stratus にはメディアストリーミングの中継機能はありません。そのため映像にせよ音声にせよ、クライアント間で直接接続して (RTMFP を使って) 送受信する以外の選択はないことになります。その際、Stratus は RTMP のサポートがないため RTMFP による接続ができなかった場合に RTMPT にフォールバックするといった技が使えません。
さらに、Stratus は接続要求を受け付ける際に URL が正しいかどうかを確認するだけで特別なセキュリティチェックは行いません。(クライアント側にアクセス管理機能の実装が可能です。どうせ P2P ですし。)
ということで、単なる仲介以上の機能を実装したい場合には FMS を使うことになるのですが、残念ながら RTMFP 対応の FMS はまだ発表されていません。。。
ファイアーウォールと NAT 越え
RTMFP は一般的に使用されていないプロトコルであること、UDP ベースであることなどから接続性に関していろいろと注意が必要になりそうです。
たとえば、企業のネットワークなどでは、セキュリティレベルの高いファイアーウォールが設置されていることも多いでしょう。このような環境では明示的に RTMFP が使用する UDP のポートを通すような設定が必要になるかもしれません。
また、インターネットと接続されている多くの機器はグローバル IP アドレスではなく、構内のみで有効なプライベート IP アドレスを使っています。そのため外部の機器からプライベート IP を直接指定できないといった問題が発生します。
これに対し RTMFP では UDP ホールパンチングを用いて NAT を越えられるようになっています。とはいえ NAT と言っても様々な種類のものがあるため、全ての NAT で機能するというわけにはいかないでしょう。
とりあえず、今の環境から外部 RTMFP サービスが使えるかは Stratus のサンプルアプリケーションにつないでみると分かります。(Stratus Sample Application@Labs)
アプリが起動されたら、アプリ画面上部の User Name と書かれたフィールドに適当な名前を入力して、その横の CONNECT ボタンを押してみてください。名前を入力した欄が "Connected as xxx" となれば接続成功です。
。。。
次回はようやく、本題の Flash Player 10.1 からの新機能についてです。
コメントする