VideoPhoneLabs.mxml と HttpIdManager.as あたりが重要。重要そうなメソッドを抽出。 HttpIdManager extends AbstractIdManager set service():Object WebServiceURLをセットする registerSuccess/Failureイベント発生 register(user:String, id:String):void doRegister() HTTPServiceを使って、usernameとidを自前サーバに登録 lookup(user:String):void 自前サーバに登録したuserを探す userが見つかったらhttpResult() 友達が見つかったらlookupSuccessイベント発生 unregister():void usernameとidを消す VideoPhoneLabs.mxml init():void カメラとマイクの設定 onConnect():void ## 接続ボタンをクリック cirrus(開発者固有のURL)にnetConnectionで接続(要DeveloperKey) ステータス変化したら netConnectionHandler() -> 接続したら connectSuccess() -> netConnection.nearID を取得できる。これが自分のID。 idManager を作成してイベント(idManagerEvent)を設定。 idManager(自前サーバ)に自分の名前とIDを登録 idManagerEvent(e:Event) "registerSuccess"イベントなら(自前サーバに自分を登録したら) loginState が LoginConnecting なら completeRegistration() -> 後述 "lookupSuccess"イベントなら(相手が見つかったら) placeCall(i.user, i.id) -> 後述。リモートユーザーの名前とIDを渡す。 completeRegistration() ## サーバに自分を登録完了時。ここ重要。 listenerStreamを設定 listenerStream.client.onPeerConnect = function(caller:NetStream) を作成。接続時に呼ばれる。 incomingStream = new NetStream(netConnection, caller.farID) を作成・再生 incomingStream.client を設定 client.onIncomingCall() -> 相手の名前を表示 client.onIm() -> メッセージを表示 placeCall(user, identity) ## 電話をかける。相手をlookupした後にリモートユーザーの名前とIDが渡される。 controlStream = new NetStream(netConnection, identity) を作成・再生 outgoingStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS); outgoingStream:NetStreamを作成 acceptCall() ## Acceptボタンを押すと呼ばれる incomingStream.receiveAudio(true) で音を受信 incomingStream.receiveVideo(true) で映像を受信 outgoingStream.publish("media-callee") で映像を発信 startVideo() -> outgoingStream.attachCamera(camera) startAudio() onCall() ## Callボタン idManager.lookup()で相手を探す。見つかったらplaceCall。
onSend() ## 送信ボタン outgoingStream.send("onIm", name, msg)
NetStreamクラスのP2P関係
コンパイラの設定でFlash Playerのバージョンを10.1以上にする。そうしないと使えない。 |