使用 P2P 的 C++ 和 VoIP [关闭]

Posted

技术标签:

【中文标题】使用 P2P 的 C++ 和 VoIP [关闭]【英文标题】:C++ and voIP using P2P [closed] 【发布时间】:2012-10-23 21:04:34 【问题描述】:

我目前正在计划我的最后一年的项目,我希望创建一个支持 IP 语音和基于文本的聊天的应用程序(尽管不是“下一个 skype”)。我只是真的想要一种易于使用的轻量级方式来完成 voIP 部分,并且它不需要扩展数量的功能,至少不需要一开始。

我想要的功能之一是它不通过服务器,但那是因为我不想在应用程序发布后维护服务器。因此,如果可以将您的 IP 提供给某人并且他们加入使用它会更好。

我计划将 Qt 框架用于 GUI,尽管它可以更改,语言 (C++) 也可以更改,所以没有什么是一成不变的。该软件将在 Windows 上运行。

我看过 H.323、sip 和其他一些开源,但似乎很难进入,我不知道他们是否做了我需要他们做的事情。

我应该研究的任何开源库都可以部分满足我的需求吗?我错过了什么来源?我对 voIP 世界完全陌生,可以朝着正确的方向推动。同样,如果有一种语言以简单的方式执行此操作,我可以切换,因为我目前处于计划阶段。 感谢我得到的任何帮助。

【问题讨论】:

This question 处理 SIP,我认为这是最流行的 VoIP 协议。我不关心 P2P 与服务器的关系。 P2P 只是客户端/服务器的一种特殊情况。 您想要什么质量等级? (体面的 VoIP 几乎需要QoS tagging)。您想支持跨 NAT 设备的机器吗? (如果是这样,您将需要研究 TURN 和 STUN,作为初学者)。您可能还想查看XMPP。哦,差点忘了:要配置NAT路由器支持TURN/STUN,一般使用UPnP。 我不需要最好的,只要质量足够好,可以听到人们在说什么。基本上只是做这项工作。我什至没有考虑过 NAT tbh ......我猜需要进一步阅读它:) @JohnMikaelGundersen:制作起来很容易,因此您可以听到人们在说什么——只需足够的缓冲以确保您在输出端获得稳定的流。对于单向流媒体,这很容易,但对于对话,如果你缓冲太多,停顿开始变得明显。 一次对话必须支持 2-8 人... 【参考方案1】:

几个月前,我首先为我的公司实施了类似的东西。

经验教训:

1. you can't just pass IPs around and expect the users to like that over skype.
   Solution:
      a. You will need your own server with the necessary ports forwarded. You will have to use some sort of firewall hole punching algorithm(take a look at UDP hole punching).

2. Using existing VoIP library is always better. Downside? You can't write proprietary code using opensource library. Hence you will need to learn H.323 and RTCP/RTP protocol.

3. You will need to write echo reduction algorithms for voice.

4. COMPRESS your audio data before sending it to another computer. PCM data can and will clog your network, delaying sound and fuzzing up everything in the process.
Use aLaw and uLaw compression schemes.

5. Make sure you take care of all the error conditions. Multimedia over network can be tricky if not really hard to implement. 

6. DONT USE QT. Use a platform specific framework like .NET and libraries that deal with sound (NAudio). 

我认为这将总结您在深入研究 VoIP 编程艺术之前首先需要解决的问题。

对于您的问题,您的问题要小得多。

1. You don't need echo reduction algorithms IF you use headsets.
2. You don't need to write hole punching algorithms if you're OK with passing IPs around. Take a look at NAT traversal(UPnP?) if the data is suppose to go on a network and to a computer that isn't on your LAN.

FLOW:
COMPUTER1->DATABUFFER->COMPRESSuLaw/aLaw->NETWORK->DECOMPRESSuLaw/aLaw->OTHERCOMPUTER
and vice versa.

祝你好运:)

【讨论】:

请不要使用aLaw/uLaw。使用作品! opus-codec.org/downloads【参考方案2】:

我会推荐 PJSIP。 http://www.pjsip.org/

PJSIP 将为您处理 SIP音频。 (它也有 STUN!)

我将不得不不同意其他答案,使用 QT。没有理由在这里“原生”。 PJSIP 不仅可以为您处理音频,还有很多其他跨平台的音频库。

关于传递 IP... )。这在 QT 中很容易实现。

【讨论】:

以上是关于使用 P2P 的 C++ 和 VoIP [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

P2P技术有啥优势?

当应用程序处于关闭状态时,不会出现 Sinch VoIP 推送通知

FreePBX 上的 VoIP 推送通知 [关闭]

iOS:开源 VoIP/SIP Objective-C 代码 [关闭]

如何仅使用音频编解码器制作 iOS VOIP/SIP 应用程序 [关闭]

ios设备中未收到VoIP推送[关闭]