2013-02-02 64 views
0

我爲了使用RTMFP寫了一些基本的功能在ActionScript:爲什麼rtmfp不能使用這些參數和功能?

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; 
} 
  • initConnection初始化NC,sendInit初始化發送 流,receiveInit初始化基礎上,遠遠同行 ID傳入的流,我複製粘貼到incomingID.text
  • 我打印每個結果到receivedMessages.text
  • 我沒有防火牆,也沒有NAT。
  • Adob​​e的示例應用程序 (http://labs.adobe.com/technologies/cirrus/samples/)完美的作品。

過程我遵循:

  • 初始化NC上應用1(發送者)
  • 初始化NC上應用2(接收器)
  • 我遠節點ID複製到應用程序2 。並運行receveInit。
  • 我上應用初始化所述發送流(sendInit)1.

注:我試圖扭轉最後2過程,doesent工作無論哪種方式。

在此之後,我執行的sendMessage(),其讀取從toSendText.text該消息。

不起作用。爲什麼? 我的代碼有什麼問題?

感謝您提前每個有用的答案。

+0

也許是因爲你的時間關閉了?這些連接是基於事件的。您需要監聽NetStream.Play.Start,以知道其他用戶已成功連接到已發佈的流,然後才能使用sendMessage()在該流上發送任何內容。還有很多其他狀態事件會觸發連接和流,您應該查看[NetStatusEvent代碼](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/NetStatusEvent.html ) –

+0

謝謝。 incomingStreamHandler將輸出incomingStream上觸發的evert事件。它不打印任何連接,如果有任何連接,我不知道爲什麼。 –

回答

1

因爲cc.rtmfp.net是連接檢查,而不是P2P介紹服務(p2p.rtmfp.net)。 cc執行一些快速測試,發送結果並斷開連接。它不執行其他功能,也不提供任何其他服務。

+0

我同意他的看法。使用p2p.rtmfp.net而不是cc.rtmfp.net –

0

我找到了。

用於開發和測試,我使用的是Mac,我測試的應用程序在那裏。不工作。仍然沒有工作。 在Windows上,它完美地工作。

奇怪。

0

您必須添加處理程序爲receiveMessage()。否則,它只是一個你必須調用它的函數。