App中的VoIP集成卷筒纸

时间:2015-03-03 11:56:30

标签: node.js asterisk sip voip mobile-application

我对如何为我们当前的移动设备实施VoIP提出了一个非常普遍的问题。网络应用。 (我们有一个Android + iOS应用程序和一个基于AngularJS / NodeJS的Web应用程序。)

我们想要实现的目标

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

一般性想法

我们在Asterisk之前有过一些经验,但事实证明这并不容易。因此,对于这个项目,我们希望在实际实现之前得到一些反馈。

关于技术的想法

起初我认为使用 WebRTC 可能是一个好主意,但由于目前仅支持Chrome,FF和Opera,而且本机移动应用程序几乎不支持我们认为WebRTC目前可能已经不在了。 (或者你认为不是吗?) 在搜索网页后,我们发现了这一点:http://www.webrtc.org/native-code

有没有人有过这个libs的经历?在我们看来,这可能是现代voip解决方案的最佳解决方案(并且还允许我们跳过星号服务器)

第二个想法是为自己设置 Asterisk 服务器。每次用户登录App时,我都会将他作为SIP客户端连接到星号。如果一个用户调用另一个用户,我们认为我们应该能够使用节点包Asterisk Manager API(https://github.com/pipobscure/NodeJS-AsteriskManager)进行调用。

第三个想法是使用 SIP提供商,但目前我不确定这是否真的是最好的主意。

由于我们不是VoIP专家,我们的应用程序中是否还有其他VoIP集成的可能性?

对此主题的任何想法都将非常感谢!谢谢!

1 个答案:

答案 0 :(得分:3)

主要因素是您应用的网络配置。鉴于您使用移动客户端和网络应用程序,几乎可以肯定您正在使用互联网,并且您可能会在混合中使用3G和4G移动网络(3G / 4G)引起VoIP的问题多于WiFi。

鉴于上述假设,您的应用程序将面临的最大挑战是在不同NAT后面的移动客户端之间建立媒体(音频和/或视频)连接,并且在很多情况下建立多个NAT。没有服务器,你几乎没有机会在这里过关。将需要服务器充当移动客户端的媒体流的中继点。您将使用RTP协议用于媒体,并确定如何从客户端A可靠地获取它到客户端B是您最大的障碍。信令方面 - 无论是SIP,网络套接字还是其他东西 - 将是次要的(注意SIP和WebRTC都使用RTP来承载媒体)。

如果我在你的鞋子里,我采取的步骤将是:

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

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

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

    • 是否要编写自己的客户端,在中间找到现有的客户端。

  3. 我可以回答部署您自己的服务器问题。你不想这样做,除非你的应用程序的VoIP部分将是你收取的费用,并取得良好的利润。运行VoIP服务器以及随之而来的所有安全和网络注意事项是一项全职工作。它可能很容易开始,但是一旦少数客户开始连接并且欺诈者出现它将会有自己的生命。在这十年里,我一直在搞乱SIP,我估计有75%的提供商已经停业,这是他们的全职工作。

    除此之外,如果没有适合您需求的SIP提供商,我会感到惊讶。如今,有一些非常复杂的服务可以让您使用自己的代码(anveo,tropo,twilio)控制呼叫流程的各个方面,直到免费服务(sip2sip,sipbroker),这些服务可能就是您开始使用的全部内容。 / p>

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