我们正在运行Cumulus服务器以进行实时语音和文本聊天。

设置是每个客户端可以通过group.post()将数据发布到同一NetGroup中的其他客户端。不幸的是,该函数非常慢(至少延迟了半秒钟),因此我们切换到使用NetStream.send来调用其他客户端上的函数,并通过该函数传递数据。这几乎立即起作用。

但是,我们现在正在尝试使用不同的NetGroups建立单独的聊天室。但是这样做时,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 Documentation,在构造函数中使用gspec.groupspecWithAuthorizations()应该允许这样做。

我们在这里缺少什么吗?

最佳答案

我找到了答案:

您还必须使接收NetStream侦听gspec.groupspecWithAuthorizations()而不是p_netStatusEvent.info.peerID。

这确实有效。不幸的是,这使语音聊天变得不可能,因为它非常慢(与NetGroup.post()一样慢)并且引入了许多声音伪像。

因此,我们必须为不同的聊天室找到另一种解决方案...

10-08 19:22