应用程序和networking中的VoIP集成

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

我们想要达到什么

在第一步我们要实现应用程序语音和video通话。 稍后我们可能会扩展到正常电话networking的外拨电话。 但是这篇文章主要是为了获得如何实现我们的第一步的信息。

一般的想法

我们曾经有过使用Asterisk的经历,但事实certificate这并不容易。 所以对于这个项目,我们想在实际执行任何事情之前得到一些反馈。

关于技术的想法

起初我认为使用WebRTC可能是一个好主意,但由于目前只支持Chrome,FF和Opera,而且几乎不支持本地移动应用,所以我们认为WebRTC现在可能已经不适用了。 (或者你认为不然?)在search网页后,我们发现了更多: http : //www.webrtc.org/native-code

有没有人有这个库的经验? 在我们看来,这可能是现代voip解决scheme的最佳解决scheme(也可以让我们跳过星号服务器)

第二个想法是为我们自己安装一个Asterisk服务器。 每当用户login到应用程序,我们将他作为一个SIP客户端连接到星号。 如果一个用户调用另一个用户,我们认为我们应该能够通过节点包Asterisk Manager API( https://github.com/pipobscure/NodeJS-AsteriskManager )进行调用。

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

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

任何关于这个问题的想法将非常感激! 谢谢!

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

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

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

  1. 在自己的移动设备上安装并试用一些软电话(blink,bria,zoiper等),find支持video通话的SIP提供商,并获得一些通话经验。 这可能不是你预期的经验…

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

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

    • 无论是写自己的客户,find一个现有的或之间的东西。

我可以回答部署你自己的服务器问题。 你不想这样做,除非你的应用程序的VoIP部分将是你收取的东西,并作出一个良好的保证金。 运行VoIP服务器以及与之相关的所有安全和networking考虑因素是一项全职工作。 它可能开始变得容易,但是一旦有几个客户开始连接,并且欺诈者出现,它将会自己生活。 在这十年里,我一直在搞SIP,估计75%的提供商已经倒闭了,这是他们的全职工作。

除此之外,如果没有适合您需求的SIP提供商,我会感到惊讶。 这些日子里有高度复杂的服务,使您可以使用自己的代码(aveo,tropo,twilio)来控制呼叫stream程的每个方面,直到可能是您开始使用的所有免费服务(sip2sip,sipbroker)。

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