App和Web中的VoIP集成

Mar*_*kus 7 voip asterisk sip mobile-application node.js

关于如何为我们当前的移动和Web应用程序实现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集成的可能性?

任何有关该主题的想法都将非常感谢!谢谢!

sip*_*wiz 5

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

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

如果我处于你的立场,我会采取的步骤是:

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

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

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

    • 无论是编写自己的客户端、寻找现有客户端还是介于两者之间的客户端。

我可以回答部署您自己的服务器问题。你不想这样做,除非你的应用程序的 VoIP 部分是你收费的并且能获得丰厚的利润。运行 VoIP 服务器以及与之相关的所有安全和网络注意事项是一项全职工作。一开始可能很容易,但一旦一些客户开始连接并且欺诈者出现,它就会自行其是。在我研究 SIP 的十年里,我估计 75% 的提供商已经倒闭,而这是他们的全职工作。

除此之外,如果没有适合您需求的 SIP 提供商,我会感到惊讶。如今,有高度复杂的服务可供使用,让您可以使用自己的代码(anveo、tropo、twilio)控制呼叫流程的各个方面,甚至还有免费服务(sip2sip、sipbroker),这可能就是您入门所需的全部。

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