3

首先,我只是一个业余爱好者,所以如果这是一个愚蠢的问题或者我太天真了,我很抱歉。(这也意味着我买不起昂贵的图书馆)

情况是这样的:我正在 C#.NET 中构建一个简单的语音聊天应用程序(类似于 Ventrilo 或 TeamSpeak,但仅适用于大约 15 或 20 人,并在 100Mbps LAN 上运行)。我有工作服务器(每个客户端的生成线程)和客户端应用程序,使用 UDP 进行连接,使用 DirectSound 来捕获和播放声音。我可以进行“一对一”通话,但我无法弄清楚最重要的事情之一:

我如何在对话中有两个以上的人?

4

1 回答 1

2

您需要一些集中的地方通过多播将数据包发回,否则您需要一种分散的方法,其中每个客户端都连接到其他每个客户端,并且每个客户端都托管多播。您要避免的是让机器将它们的数据转发给其他每台机器,这将导致 O(n) 时间向每台机器发送消息(并且 I/O 很慢!)。

在任何一种情况下,您最终都会遇到相同的问题:如何组合音频流。实现此目的的一种简单机制是在将信号发送回(从网络端口或发送到扬声器)之前按位或将信号放在一起,但这假设您可以访问非压缩和合理同步的流。

于 2010-02-06T20:45:12.053 回答