NetStream.send 在 RTMFP 中无法与 NetGroup 合作



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

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

但是,我们现在正在尝试使用不同的网络组构建单独的聊天室。但是当这样做时,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()应该允许这样做。

我们在这里错过了什么吗?

我找到了答案:

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

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

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

相关内容

  • 没有找到相关文章

最新更新