RTMFP 上の 1 対 1 ストリーミング (NetConnection 編)

RTMFP 上の 1 対 1 のストリーミングのコーディング例を紹介します。今までに RTMP を使ったストリーミングのコードを書いたことがあれば、RTMFP の 1 対 1 接続のストリーミングの実装は簡単です。コードの基本は同じですので。

今回のコードは、Flash Player 10 に対応した開発環境 (Flash Professional CS4, Flex Builder 3) があれば試せます。

以下の記事では、ランデブーサービスとして Stratus を使うことを前提としています。そこで、まずは Stratus を利用するための準備をします。

Stratus への接続準備

Stratus のサービスを使うには Stratus の開発者キーが必要です。開発者キーは Adobe Labs に取得用の専用ページ (Stratas Developer Key Download) が用意されていますので、そこから入手してください。(Adobe ID が必要です)

入手した開発者キーは "rtmfp://stratus.adobe.com/" の後ろに追加して、それを接続先 URL として使用します。そのため、開発者ごとに独立したサービスが提供できます。

なお、Stratus への接続はあくまで仲介サービスを利用するためです。Stratus とストリーミング用のセッションを張るためではありません。

NetConnection インスタンスの生成

まず Stratus へ接続するために NetConnection のインスタンスを生成します。

private var _netConnection:NetConnection = new NetConnection();
 

次に connect() メソッドを使って Stratus に接続します。

public function connect(command:String, ...  arguments):void
 

connect() メソッドは RTMFP 用に機能が拡張されています。関数の形式は変わっていませんが、プロトコルに "rtmfp:" を指定できるようになっています。

Stratus に接続する場合は、上でも説明したように "rtmfp://stratus.adobe.com/xxxxxxxx-xxxx" が (xxxxxxxx-xxxx は開発者キー) 引数となります。ちなみに、URL の後にインスタンス名を足して "rtmfp://stratus.adobe.com/xxxxxxxx-xxxx/room1" のようにしても無視されます。

サーバー通信を行わずに IP マルチキャストにより通信相手を見つける場合は、引数に "rtmfp:" を指定します。ただし、このオプションは今回の 1 対 1 ストリーミングでは使用できません。

2 つめ以降の引数は Stratus では無視されます。FMS であれば application.onConnect() に (定義されていれば) 渡されます。

さて、下は実際に Stratus に接続するサンプルです。NetConnection の connect() メソッドの引数に "Stratus のアドレス + 自分の開発者キー" を指定しています。

// 接続用の情報
private const SERVER:String = "rtmfp://stratus.adobe.com/";
private const DEVKEY:String = "自分の開発者キー";
 
private var _netConnection:NetConnection;
 
private function doConnect():void{
  _netConnection = new NetConnection();
  _netConnection.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
  _netConnection.connect(SERVER + DEVKEY);
}
 
private function netStatusHandler(event:NetStatusEvent):void {
  if (event.info.code == "NetConnection.Connect.Success"){
    trace("接続成功");
    onConnect();
  }
}
 

これで Stratus に他のクライアントを紹介してもらえるようになりました。ここまでのコードは、プロトコルの指定が rtmfp:// になっている事を除けば RTMP を使った FMS への接続と基本的に同じです。

NetStatus イベント処理

connect() メソッドを呼ぶと、結果は NetStatusEvent を使って非同期に通知されます。そのため、イベントハンドラーを定義して、NetConnection のインスタンスに登録しておきます。上の例では netStatusHandler() というメソッドを使っています。

上のサンプルでは、コード簡略化のため成功した場合のみチェックしていますが、実際には下の 3 つくらいは確認しておくとよいかもです。

NetConnection.Connect.Success  // 接続が成功した
NetConnection.Connect.Failed  // 接続に失敗した
NetConnection.Connect.Closed  // 接続が閉じられた
 

NetConnection の新しい属性

RTMFP 接続が成功すると、各クライアントにユニークな ID が発行されます。この値を参照できるように、NetConnection クラスには新しい属性が追加されています。

NetConnection.nearID:String  [参照のみ]  クラアント自身の ID
NetConnection.farID:String  [参照のみ]  接続相手の ID
 

nearID は接続要求を出したクライアントに割り当てられた ID です。他のクライアントがこのクライアントと P2P 接続をするには、この ID を入手する必要があります。

farID は接続の相手方の ID です。この場合は Stratus のノードの ID ということになります。

これらの属性には接続が成功した後に値が設定されます。下は自分のクライアント ID を参照している例です。

private function onConnect():void {
  trace("my ID: " + _netConnection.nearID);
}
 

今回は、ここまでです。次は、NetStream 編です。

トラックバック(0)

トラックバックURL: http://cuaoar.jp/mt4/mt-tb.cgi/19

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261