如何处理音频流和混合VoIP

时间:2013-08-25 18:10:22

标签: java audio bandwidth mixing

我们正在研究基于Java的Voice over IP计划,我们需要找到一种将流和服务器端压力保持在合理数量的有效方法。我们正在为多人游戏编写这个,我们计划有几种不同的模式来确定如何混合和发送音频。如果他们选择不参与语音聊天,我们计划让它“选择加入”以保持无用的流量不受影响。除此之外,我们正在考虑频道,私人聊天(2人)和接近度。如果我们使用其中包含16个人的频道,我们想要找到是否有办法避免x ^ 2个数量的流(在这种情况下为256个)。我们还需要尝试将客户端工作保持在合理的水平,因为它将运行游戏。我们不太确定大型服务器可以处理多少工作,因为随着越来越多的人进入某个频道,它将呈指数级增长。我们可能需要限制每个频道的人数,或允许服务器所有者这样做,以及限制频道数量。这个游戏可以同时在服务器上有大约40-500个人,具体取决于受欢迎程度,我们不确定如何处理服务器处理和带宽上的这种压力。

基本上,我们要问是否有人知道现有系统有效处理这个问题的方法。我们正在使用JSpeex进行音频编码,如果有任何相关性的话。那么,是否有任何方法可以处理这个问题,甚至可能是来自社区的一些想法?我们还计划在我们一直在开发的较小规模的Skype程序中重新实现这一点。

1 个答案:

答案 0 :(得分:1)

我不明白为什么你需要256个流。你不应该直接从客户到客户。

对于每个客户端,您需要一个到服务器的双向连接。所有输入/输出音频都通过服务器进行定向。服务器不是将播放器要接收的所有音频多路复用到单个音频流中并将其转发。

当您进行私人聊天时,服务器只会在与您私聊时转发来自其他玩家的数据包。

使用邻近时,服务器将来自范围内任何播放器的音频多路复用为单个流。

我认为任何体面的音频编码包都支持从多个频道多路复用音频,但我对JSpeex一无所知。