我正在尝试将自定义回调处理程序添加到p2p应用程序中的NetStream客户端。问题是,当我添加这样的处理程序时,NetStream客户端不像以前那样运行。似乎NetStream.client对象已更改。我知道默认对象是这个。但是将客户端更改为此并不能解决问题。
remoteControlStream是传入流。 localControl流是正在发布的流
这是由对等方发送的localControlStream,并作为remoteControlStream接收:
private function initLocalControlStream():void{
localControlStream = new NetStream(nc, NetStream.DIRECT_CONNECTIONS);
localControlStream.addEventListener(NetStatusEvent.NET_STATUS, localControlHandler);
localControlStream.publish(myPeerID+"control");
var localControlStreamClient:Object = new Object();
localControlStreamClient.onPeerConnect = function(callerns:NetStream):Boolean{
txtTest.text = "peer connected";
if(side=="host"){
farPeerID = callerns.farID;
if(!allreadyConnected){
initRemoteControlStream();
allreadyConnected = true;
}
}
return true;
}
localControlStream.client = localControlStreamClient;
}
这是接收流的NetStream :
private function initRemoteControlStream():void{
txtTest.text = "setting up remote stream";
if(side=="client"){
farPeerID = this.parameters.hostFingerprint;
}
remoteControlStream = new NetStream(nc, farPeerID);
remoteControlStream.addEventListener(NetStatusEvent.NET_STATUS, remoteControlHandler);
remoteControlStream.client.test = new function():void{
txtTest.text = "Callback handler working";
}
remoteControlStream.play(farPeerID+"control");
remoteControlStream.client = this;
}
我将处理程序添加到remotecControlStream中(如上所述):
remoteControlStream.client.test = new function():void{
txtTest.text = "Callback handler working";
}
添加上述处理程序时,当我连接时,不会调用localControlStream的onPeerConnect方法。当我删除该处理程序时,会调用onPeerConnect方法。
任何有一些建议/想法的人。显然问题是NetStream.client。
非常感谢您的帮助。
杰拉德
答案 0 :(得分:3)
NetStatusEvent.NET_STATUS
的{{1}}的{{1}} 'NetConnection.Connect.Success'
上,我调用了静态NetConnection
类的以下函数:
Main.connection
这是Streams
函数:
` public static function initOut(): void {
streamOut = new NetStream(Main.connection, NetStream.DIRECT_CONNECTIONS);
var peerConnected:Object = new Object();
peerConnected.onPeerConnect = function(subscriberStream : NetStream) : Boolean {
var oo:RecievingObject = new RecievingObject();
subscriberStream.client = oo;
if(!streamIn){ initIn((subscriberStream as NetStream).farID); }
return true;
}
streamOut.client = peerConnected;
streamOut.addEventListener(NetStatusEvent.NET_STATUS, onOutStatus);
streamOut.attachCamera(Camera.getCamera());
streamOut.attachAudio(Microphone.getMicrophone());
streamOut.publish('media');
}`
和initIn
类:
public static function initIn(id: String): void {
streamIn = new NetStream(Main.connection, id);
streamIn.client = new RecievingObject();
streamIn.addEventListener(NetStatusEvent.NET_STATUS, onInStatus);
streamIn.receiveVideo(true);
streamIn.receiveAudio(true);
streamIn.play('media');
VideoWindow.initIn(streamIn);
Mixer.initSound(streamIn);
}