Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;P2P技术与voIP_C++_Windows_Qt_P2p_Voip - Fatal编程技术网

C++ C++;P2P技术与voIP

C++ C++;P2P技术与voIP,c++,windows,qt,p2p,voip,C++,Windows,Qt,P2p,Voip,我目前正在计划我最后一年的项目,我希望创建一个支持IP语音和基于文本的聊天(虽然不是“下一个skype”)的应用程序。我只是想用一种简单易用的轻量级方法来完成voIP部分,它不需要大量的功能,至少一开始不需要 我想要的一个特性是它不需要服务器,但这是因为我不想在应用程序发布后维护服务器。因此,如果有可能只是把你的IP给某人,他们就可以使用它来加入 我计划使用Qt框架进行GUI,尽管它可以更改,语言(C++)也可以更改,所以没有什么是一成不变的。该软件将在windows上运行 我已经看过H.323

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

我想要的一个特性是它不需要服务器,但这是因为我不想在应用程序发布后维护服务器。因此,如果有可能只是把你的IP给某人,他们就可以使用它来加入

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

我已经看过H.323、sip和其他一些开源软件,但它似乎很难进入,我无法确定它们是否做了我需要它们做的事情

任何我应该研究的开源库都能部分满足我的需求吗?我错过了什么消息来源?我对voIP世界完全陌生,可以朝着正确的方向努力。同样,如果有一种语言能以一种简单的方式做到这一点,我可以直接切换,因为我目前正处于计划阶段。
谢谢你对我的帮助

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

经验教训:

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.
祝你好运:)

我推荐PJSIP。

PJSIP将为您处理SIP和音频。(它也打晕了!)

我不同意另一个答案,一定要用QT。没有理由在这里“土生土长”。PJSIP不仅可以为您处理音频,而且还有许多其他跨平台音频库


关于传递IP。。。如果您打算在LAN上使用此功能,我建议使用UDP广播来发现其他用户(并在UI中有一个位置来定义您的用户名,以便最终用户可以相互识别)。这在QT中很容易实现。

处理SIP,我认为这是VoIP最流行的协议。我不知道P2P和服务器之间的关系是什么。P2P只是客户机/服务器的一个特例。您想要什么质量级别?(这是非常需要的)。是否要跨NAT设备支持计算机?(如果是这样的话,首先,您需要研究和解决问题)。你可能还想看看。哦,差点忘了:要配置NAT路由器以支持TURN/STUN,您通常会使用。我不需要最好的路由器中的最好的,只要质量足够好,可以听到人们在说什么。基本上就是这样。我甚至没有考虑过NAT tbh。。。我想还需要多读一点:)@JohnMikaelGundersen:制作起来很容易,这样你就可以听到人们在说什么——只是缓冲足够多,以确保你得到稳定的输出流。对于单向流,这很容易,但对于会话,如果缓冲太多,暂停开始变得明显。它必须在一次会话中支持2-8人…请不要使用aLaw/uLaw。使用Opus!