Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Node.js 应用程序中的VoIP集成&;网状物_Node.js_Asterisk_Sip_Voip_Mobile Application - Fatal编程技术网

Node.js 应用程序中的VoIP集成&;网状物

Node.js 应用程序中的VoIP集成&;网状物,node.js,asterisk,sip,voip,mobile-application,Node.js,Asterisk,Sip,Voip,Mobile Application,关于如何为我们当前的移动和Web应用程序实现VoIP,我有一个非常普遍的问题。(我们有一个Android+iOS应用程序和一个基于AngularJS/NodeJS的Web应用程序) 我们想要实现的目标 在第一步中,我们希望实现应用程序间的语音和视频通话。稍后,我们可能会扩展到正常电话网络的出站呼叫。但这篇文章主要是为了获取关于如何实现我们的第一步的信息 总体思路 之前我们有过一些使用星号的经验,但结果证明这一点并不容易。因此,对于这个项目,我们希望在实际实施之前获得一些反馈 关于技术的思考 起初

关于如何为我们当前的移动和Web应用程序实现VoIP,我有一个非常普遍的问题。(我们有一个Android+iOS应用程序和一个基于AngularJS/NodeJS的Web应用程序)

我们想要实现的目标

在第一步中,我们希望实现应用程序间的语音和视频通话。稍后,我们可能会扩展到正常电话网络的出站呼叫。但这篇文章主要是为了获取关于如何实现我们的第一步的信息

总体思路

之前我们有过一些使用星号的经验,但结果证明这一点并不容易。因此,对于这个项目,我们希望在实际实施之前获得一些反馈

关于技术的思考

起初我认为使用WebRTC可能是一个好主意,但由于目前它仅在Chrome、FF和Opera上受支持,而且本地移动应用程序几乎不支持它,因此我们认为WebRTC可能暂时不受支持。(或者你不这么认为?) 在网络上搜索了一段时间后,我们发现:

有人有过这种libs的经验吗?在我们看来,这可能是现代voip解决方案的最佳解决方案(也允许我们跳过星号服务器)

第二个想法是为我们自己设置一个星号服务器。每次用户登录应用程序时,我们都会将其作为SIP客户端连接到星号。如果一个用户调用另一个用户,我们认为应该能够进行调用,例如使用节点包Asterisk Manager API()

第三个想法是使用一个SIP提供者,但目前我不确定这是否是最好的想法

既然我们不是VoIP专家,那么在我们的应用程序中集成VoIP还有其他可能性吗


如果您对这个问题有任何想法,我们将不胜感激!谢谢大家!

主要因素是应用程序将使用的网络配置。考虑到您使用的是移动客户端和web应用程序,几乎可以肯定您使用的是互联网,也可能是3G和4G移动网络的混合(3G/4G对VoIP造成的问题比WiFi多得多)

鉴于上述假设,您的应用程序面临的最大挑战是在不同NAT后面的移动客户端之间建立媒体(音频和/或视频)连接,在很多情况下是多个NAT。如果这里没有服务器,你几乎不可能过得去。服务器需要充当移动客户端媒体流的中继点。您将为媒体使用RTP协议,而解决如何可靠地将其从客户端A传输到客户端B是您最大的障碍。信令端——无论是SIP、web套接字还是其他什么——都是次要的(注意SIP和WebRTC都使用RTP来承载媒体)

如果我站在你的立场,我会采取以下步骤:

  • 在您自己的移动设备上安装并试用一些软电话(blink、bria、zoiper等),找到支持视频通话的SIP提供商,并获得一些通话经验。这可能不是你所期待的经历

  • 一旦您对软电话体验感到满意,您就需要做出两个决定:

    • 是部署自己的服务器还是使用现有的提供程序

    • 无论是编写自己的客户机,还是查找现有客户机或介于两者之间的客户机

  • 我可以回答部署您自己的服务器的问题。你不想这样做,除非你的应用程序的VoIP部分将是你收费的东西,并获得很好的利润。运行VoIP服务器以及随之而来的所有安全和网络注意事项都是一项全职工作。一开始可能很容易,但一旦一些客户开始连接,欺诈者出现,它就会有自己的生活。在过去的十年里,我一直在和SIP打交道,我估计75%的供应商已经倒闭,这是他们的全职工作

    除此之外,如果没有一个SIP提供商能够满足您的需求,我会感到惊讶。如今,有非常复杂的服务可供使用,这些服务使您可以使用自己的代码(anveo、tropo、twilio)控制呼叫流的各个方面,甚至免费服务(sip2sip、sipbroker),这可能就是您开始使用的全部需要


    对于客户端软件,您可以利用各种SIP SDK(pjsip)。

    感谢您的详细回答!请告诉我,如果我在你的回答中理解错了什么,但在我看来,你的大部分帖子都是关于正常电话网络的外呼,对吗?在过去几天里,我们做了大量的研究,目前看来,一个用于应用程序间通信的WebRTC解决方案对我们来说已经足够了(可能有一个STUN/TURN服务器,老实说,我们仍然没有足够的知识,因为我们只是在头脑风暴阶段)。只有当我们想在自己的网络之外打电话时,才需要Sip提供商,对吗?不,我的答案根本不是关于PSTN电话。SIP、WebRTC、XMPP或其他选择仍然是次要的。如何管理RTP流(SIP、WebRTC和XMPP都用于音频和视频)是主要关注点。如果说“在您自己的网络之外”,您的意思是您可以将所有呼叫保留在一个专用网络中,其中每个设备都可以直接访问其他设备,这使得处理RTP变得更加容易。