c# - 语音 session ——如何让更多人参与进来?

标签 c# udp voip directsound

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

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

如何让超过两个人参与对话?

最佳答案

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

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

关于c# - 语音 session ——如何让更多人参与进来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2207642/

相关文章:

c# - 将带有asp.net core的文件作为字节数组上传到数据库中

c# - 我应该如何在管道中引用 IHttpModule 实例?

c# - 当 culture 在 asp.net webform 中设置为 ar-AE 时,7 月的月份显示错误

java - 寻找 GCD,Java 套接字编程

java - 获取模拟rtp数据包的序列号

c# - VOIP:PC 到 PC 通话和 session

debugging - 确定Speex编码的音频与预期设置有何不同

c# - DbC(按契约(Contract)设计)和单元测试

按钮操作后 JavaFx 阶段没有响应

java - 如何在 Java 中获取 DatagramSocket (UDP) 的本地地址