我们正在运行Cumulus服务器来进行实时语音和文本聊天。
设置是每个客户端可以通过 group.post() 将数据发布到同一 NetGroup 中的其他客户端。不幸的是,这个函数非常慢(至少延迟半秒),所以我们改用 NetStream.send 来调用其他客户端上的函数,通过它传递数据。这几乎可以立即生效。
但是,我们现在正在尝试使用不同的 NetGroup 构建单独的聊天室。但是这样做时,NetStream.send() 不再起作用,这些函数永远不会在其他客户端上调用,也不会传输语音数据。基本上,整个发布 NetStream 似乎不再工作了。
我们有以下设置来在每个客户端上建立一个 NetGroup 和一个发布流:
var gspec:GroupSpecifier = new GroupSpecifier("Group1");
gspec.multicastEnabled = true;
gspec.postingEnabled = true;
gspec.serverChannelEnabled = true;
gspec.objectReplicationEnabled = true;
gspec.routingEnabled = true;
_group = new NetGroup(_netConnection, gspec.groupspecWithAuthorizations());
_group.addEventListener(NetStatusEvent.NET_STATUS, handleNetGroupStatus);
_sendStream = new NetStream(_netConnection, gspec.groupspecWithAuthorizations());
_sendStream.addEventListener(NetStatusEvent.NET_STATUS, handleNetStreamStatus);
_sendStream.client = this;
_sendStream.attachAudio(_mic);
_sendStream.publish("media");
以下代码用于收听“媒体”流:
case "NetGroup.Neighbor.Connect":
var netStream :NetStream = new NetStream(_netConnection, p_netStatusEvent.info.peerID);
netStream.addEventListener(NetStatusEvent.NET_STATUS, handleNetStreamStatus);
netStream.client = this;
netStream.play("media");
break;
NetGroup 连接本身可以工作,当邻居连接时,每个客户端都会调用“NetGroup.Neighbor.Connect”。但是 _sendStream 本身根本不起作用。没有接收到数据,没有调用函数。
当发布 NetStream 以下列方式构建时,它确实有效:
_sendStream = new NetStream(_netConnection, NetStream.DIRECT_CONNECTIONS);
但是,我们只希望 NetStream 发送到单个 NetGroup,并且根据Adobe 文档,在构造函数中使用gspec.groupspecWithAuthorizations()应该完全允许。
我们在这里遗漏了什么吗?