2015-03-03 45 views
4

我有一个非常普遍的问题,关于如何为我们当前的移动应用程序执行V​​oIP & Web App。 (我们有一个Android + iOS应用程序和一个基于AngularJS/NodeJS的Web应用程序)。在应用程序和网络中的VoIP集成

我们要实现

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

总体思路

我们有一些经验与Asterisk这竟然是远非易事了。所以对于这个项目,我们想在实际执行任何事情之前得到一些反馈。技术

起初

思考,我想这可能是使用的WebRTC一个好主意,但因为它仅支持Chrome,FF和Opera的时刻,几乎是不支持原生我们认为WebRTC现在可能已经不适用了。 (或者你认为不然?) 在网上搜索了一下之后,我们发现了更多:http://www.webrtc.org/native-code

有没有人对此库有过使用经验?在我们看来,这可能是一个现代化的VoIP解决方案的最佳解决方案(同时也可以让我们跳过星号服务器)

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

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

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

对这个问题的任何想法将不胜感激!谢谢!

回答

3

主要因素是您的应用程序将使用的网络配置。鉴于您正在使用移动客户端和网络应用程序,几乎可以确定您正在使用互联网,并且您可能还会拥有3G和4G移动网络(3G/4G导致VoIP比WiFi更多的问题) 。

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

如果我是你的话我会采取的步骤将是:

  1. 安装,并尝试在自己的移动设备上的一些软电话(眨眼,布里亚,zoiper等人),找一个SIP提供商支持视频通话并获得一些通话经验。它可能不是你所预期的体验......

  2. 一旦你习惯使用网络电话的经验,你就那么需要做出两个决定:

    • 是部署在自己的服务器或使用现有的提供者,

    • 是否要编写自己的客户端,找到现有的客户端或其中之一。

我可以回答了部署自己的服务器问题。除非您的应用的VoIP部分将要收取费用并取消优惠,否则您不希望这样做。运行VoIP服务器以及与之相关的所有安全和网络考虑因素是一项全职工作。它可能会开始变得容易,但是一旦有少数客户开始连接并且欺诈者出现,它将会自行发生。在这十年里,我一直在与SIP打交道,我估计有75%的提供商已经停业,这是他们的全职工作。

除了所有我会惊讶的,如果没有一个SIP提供商适合您的需求。这些日子里有非常复杂的服务可供您使用自己的代码(aveo,tropo,twilio)直接控制您的呼叫流程的每个方面,直到您可以开始使用的免费服务(sip2sip,sipbroker)。

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

+0

感谢您的详细解答!请告诉我,如果我在你的答案中理解了错误,但在我看来,你的大部分帖子都是关于正常电话网络的外拨电话,对吧? 我们在过去几天做了大量的研究,现在看来我们认为WebRTC的interp通信解决方案对我们来说已经足够了(可能用STUN/TURN服务器,说实话我们还没有足够的知识,因为我们只是在头脑风暴阶段)。 只有当我们想在我们自己的网络之外打电话时,才需要Sip提供商,对吧? – Markus 2015-03-07 11:22:43

+0

不,我的答案根本不是PSTN电话。 SIP,WebRTC,XMPP或其他的选择仍然是次要的。如何管理RTP流(SIP,WebRTC和XMPP都用于音频和视频)是主要关心的问题。如果通过“您自己的网络之外”,则意味着您可以将所有呼叫保留在单个专用网络中,每个设备都可以直接访问每个其他设备,从而使处理RTP变得更容易。 – sipwiz 2015-03-07 12:02:39