对于我的业余爱好项目,我希望实现群组语音聊天功能。非常简单:我正在运行多个客户端(移动设备)可以连接到的服务器。有些客户在同一个" group"我希望他们有一个音频聊天功能。
我已经使用C#设置了一个UDP服务器客户端,客户端可以连接到该客户端。我已成功通过服务器在客户端之间实现音频分发,并且基本功能运行良好。
我不确定我是否会采用这种方法朝着正确的方向前进。 例如,我坚持混合不同声音的实现(两个人同时说话而另一个人正在听两个人)。我真的不知道如何将两种声音混合在一起并为不同的客户产生不同的输出 - 上面提到的例子:两个人说话应该只接收另一个人的输入,而不说话的人应该得到混合另外两个说话。
最好的服务器端结构是什么?我是否应该朝着完全不同的方向前进并使用SIP?我很难在网上找到合适的资源来解决这个问题,而且我真的陷入困境。
感谢您的帮助!
答案 0 :(得分:1)
让我建议在您的应用程序中使用标准。如果(我强烈建议)您的应用程序是一个Web应用程序,WebRTC会使您的工作变得更加容易。请在WebRTC samples中查看一些我确信会激励您的想法,包括multiple peer connections
如果您只对群组通话感兴趣,可以将PBX服务器安装为具有强大会议功能的星号。您可以在客户端(例如sip.js,sipml5)的WebRTC之上使用SIP库,通过SIP连接到星号并获取会议服务。这可能听起来令人生畏,但调用会议室的代码可以简化为几行,星号可以很容易地安装在真机中的linux盒子中,或者安装在虚拟机器或Docker容器中。
如果您更喜欢胖客户端,我建议使用SIP库作为PJSIP(顺便提一下,它是星号的新SIP堆栈的基础)。专有解决方案适应未来,而标准解决方案则受其推动。