2013-02-02 6 views
0

나는 RTMFP를 사용하기 위해 ActionScript에서 몇 가지 기본 기능을 썼다 : receiveInit는 지금까지 피어 ID를 기반으로 들어오는 스트림을 초기화 sendInit가 전송 스트림을 초기화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를 초기화를하는 I 복사하여 붙여 넣기 incomingID.text
  • 나는 모든 결과를 receivedMessages.text
  • 에 인쇄합니다. 방화벽이나 NAT가 없습니다.
  • Adobe 샘플 애플리케이션 (http://labs.adobe.com/technologies/cirrus/samples/)은 완벽하게 작동합니다.

절차는 I은 다음과 같습니다에

  • 초기화 NC 응용 프로그램 1. (발신자)
  • 초기화 NC에 응용 프로그램 2 (수신기)
  • 내가 응용 프로그램 2에까지 피어 ID를 복사 receveInit를 실행하십시오.
  • 나는 응용 프로그램 1.

참고 전송 스트림 (sendInit를) 초기화 : 내가 마지막이 절차 doesent 작업 중 하나의 방법을 반대로 시도했다.

이 후, 나는 toSendText.text에서 메시지를 읽는 sendMessage()를 실행한다.

작동하지 않습니다. 왜? 내 코드가 잘못되었습니다.

도움이 될만한 답변을 미리 보내 주셔서 감사합니다.

+0

타이밍이 꺼져있을 가능성이 있습니까? 이러한 연결은 이벤트 기반입니다. NetStream.Play.Start를 수신하여 다른 사용자가 게시 된 스트림에 성공적으로 연결되었는지 확인한 다음 sendMessage()를 사용하여 해당 스트림에서 아무 것도 보낼 수 있어야합니다. [NetStatusEvent 코드] (http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/NetStatusEvent.html)에서 조사해야하는 연결 및 스트림에 대해 발동하는 다른 많은 상태 이벤트가 많이 있습니다.) –

+0

고맙습니다. incomingStreamHandler는 incomingStream에서 트리거되는 evert 이벤트를 출력합니다. 연결에 anyting을 인쇄하지 않습니다. 연결이 전혀없는 경우 그 이유를 모르겠습니다. –

답변

1

입니다. cc.rtmfp.net은 P2P 소개 서비스 (p2p.rtmfp.net)가 아니기 때문에 연결 확인 프로그램이기 때문입니다. cc는 몇 가지 빠른 테스트를 수행하고 결과를 보내며 연결을 끊습니다. 다른 기능을 수행하지 않으며 다른 서비스도 제공하지 않습니다.

+0

나는 그와 동의한다. cc.rtmfp.net 대신 p2p.rtmfp.net을 사용하십시오. –

0

알았습니다.

개발 및 테스트를 위해 Mac을 사용하고 응용 프로그램을 테스트했습니다. 작동하지 않았다. 아직도 일하지 않습니다. Windows에서는 완벽하게 작동합니다.

이상한.

0

receiveMessage()에 대한 처리기를 추가해야합니다. 그렇지 않으면 그냥 호출해야하는 함수 일뿐입니다.