Flash NetStream.client自定义回调处理程序问题
我正在尝试向p2p应用程序中的NetStream客户端添加自定义回调处理程序。问题是,当我添加这样一个处理程序时,NetStream客户端的功能与以前不同。NetStream.client对象似乎已更改。我知道默认的对象是这个。但是,将客户机更改为此并不能解决问题 remoteControlStream是传入流。localControl流就是正在发布的流 这是由对等方发送并作为remoteControlStream接收的localControlStream:Flash NetStream.client自定义回调处理程序问题,flash,actionscript-3,client,p2p,netstream,Flash,Actionscript 3,Client,P2p,Netstream,我正在尝试向p2p应用程序中的NetStream客户端添加自定义回调处理程序。问题是,当我添加这样一个处理程序时,NetStream客户端的功能与以前不同。NetStream.client对象似乎已更改。我知道默认的对象是这个。但是,将客户机更改为此并不能解决问题 remoteControlStream是传入流。localControl流就是正在发布的流 这是由对等方发送并作为remoteControlStream接收的localControlStream: private function i
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;
}
remoteControlStream.client.test = new function():void{
txtTest.text = "Callback handler working";
}
这是接收流的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,如下所示(如上所示):
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;
}
remoteControlStream.client.test = new function():void{
txtTest.text = "Callback handler working";
}
添加上述处理程序时,当我连接时,不会调用localControlStream的onPeerConnect方法。当我移除该处理程序时,将调用onPeerConnect方法
任何有意见/想法的人。显然,问题出在NetStream.client上
非常感谢你的帮助
杰拉德是斯特拉特斯,对吗?
我使用了以下模型:
在位于Main.connection
的NetStatusEvent.NET\u STATUS
'NetConnection.Connect.Success'
上,我调用了静态流的以下函数
类:
` 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');
}`
public class RecievingObject extends Object
{
public function RecievingObject()
{
}
public function message(str: String):void {
ChatWindow.addText('>> ' + str);
}
public function onPeerConnect(ns: NetStream): Boolean {
// trace(ns.farID);
return true;
}
}
以下是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);
}
以及receivingObject
类:
` 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');
}`
public class RecievingObject extends Object
{
public function RecievingObject()
{
}
public function message(str: String):void {
ChatWindow.addText('>> ' + str);
}
public function onPeerConnect(ns: NetStream): Boolean {
// trace(ns.farID);
return true;
}
}
谢谢www0z0k,您的答案看起来很有希望。我将尝试一下,我将汇报=)我实现了我在项目中需要的部分,并且工作得非常完美。谢谢!