0

RTMFP を使用するために、ActionScript でいくつかの基本的な関数を作成しました。

import flash.events.NetStatusEvent;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.ui.Keyboard;

private var serverAddress:String = "rtmfp://cc.rtmfp.net/";
private var serverKey:String = "xxxxx";
private var netConnection:NetConnection;
private var outgoingStream:NetStream;
private var incomingStream:NetStream;

private function initConnection():void {
    netConnection = new NetConnection();
    netConnection.addEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler);
    netConnection.connect(serverAddress + serverKey);
}

private function netConnectionHandler(event:NetStatusEvent):void {
    receivedMessages.text += "NC Status: " + event.info.code + "\n";

    //Some status handling will be here, for now, just print the result out.
    switch (event.info.code) {
        case 'NetConnection.Connect.Success':
            receivedMessages.text += "My ID: " + netConnection.nearID + "\n";
            break;
    }
}

private function sendInit():void {
    outgoingStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);
    outgoingStream.addEventListener(NetStatusEvent.NET_STATUS, outgoingStreamHandler);
    outgoingStream.publish("media");

    var sendStreamObject:Object = new Object();
    sendStreamObject.onPeerConnect = function(sendStr:NetStream):Boolean {
        receivedMessages.text += "Peer Connected ID: " + sendStr.farID + "\n";
        return true;
    }

    outgoingStream.client = sendStreamObject;
}

private function receiveInit():void {
    receivedMessages.text += "Initializing Receiving Stream: " + incomingID.text + "\n";

    incomingStream = new NetStream(netConnection, incomingID.text);
    incomingStream.addEventListener(NetStatusEvent.NET_STATUS, incomingStreamHandler);
    incomingStream.play("media");
    incomingStream.client = this;
}

public function receiveMessage(message:String):void {
    receivedMessages.text += "Received Message: " + message + "\n";
}

private function outgoingStreamHandler(event:NetStatusEvent):void {
    receivedMessages.text += "Outgoing Stream: " + event.info.code + "\n";
}

private function incomingStreamHandler(event:NetStatusEvent):void {
    receivedMessages.text += "Incoming Stream: " + event.info.code + "\n";
}

private function sendMessage():void {   
    outgoingStream.send("receiveMessage", toSendText.text);
}

private function disconnectNetConnection():void {
    netConnection.close();
    netConnection.removeEventListener(NetStatusEvent.NET_STATUS, netConnectionHandler);
    netConnection = null;
}

private function disconnectOutgoing():void {
    outgoingStream.close();
    outgoingStream.removeEventListener(NetStatusEvent.NET_STATUS, outgoingStreamHandler);
    outgoingStream = null;
}

private function disconnectIncoming():void {
    incomingStream.close();
    incomingStream.removeEventListener(NetStatusEvent.NET_STATUS, incomingStreamHandler);
    incomingStream = null;
}
  • initConnectionNC をsendInit初期化し、送信ストリームをreceiveInit初期化し、コピーして貼り付けた先のピア ID に基づいて着信ストリームを初期化しますincomingID.text
  • すべての結果をreceivedMessages.text
  • ファイアウォールも NAT もありません。
  • Adobe サンプル アプリケーション ( http://labs.adobe.com/technologies/cirrus/samples/ ) は完全に機能します。

私が従う手順:

  • アプリケーション 1 で NC を初期化します。 (送信側)
  • アプリケーション 2 で NC を初期化します。 (レシーバー)
  • ファー ピア ID をアプリケーション 2 にコピーし、receveInit を実行します。
  • アプリケーション 1 で送信ストリーム (sendInit) を初期化します。

注: 最後の 2 つの手順を逆にしようとしましたが、どちらの方法でも機能しません。

この後、 からメッセージを読み取る sendMessage() を実行しますtoSendText.text

動作しません。なんで?コードの何が問題になっていますか?

事前に役立つ回答をありがとうございます。

4

3 に答える 3

1

cc.rtmfp.net は P2P 導入サービス (p2p.rtmfp.net) ではなく、接続チェッカーであるためです。cc はいくつかの簡単なテストを実行し、結果を送信して切断します。他の機能を実行したり、他のサービスを提供したりしません。

于 2013-02-02T19:22:42.653 に答える
0

わかった。

開発とテストにはMacを使用し、そこでアプリケーションをテストしました。動作しませんでした。それでも動作しません。Windowsでは、完全に機能します。

変。

于 2013-02-06T05:33:01.597 に答える