App 和 Web 中的 VoIP 集成

VoIP Integration in App & Web

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

我们想要实现的目标

第一步我们要实现应用间语音和视频通话。稍后我们 可能会 扩展到正常电话网络的外呼。但是这个 post 主要是为了了解如何实现我们的第一步。

总体思路

我们之前有过一些使用 Asterisk 的经验,但事实证明这远非易事。因此,对于这个项目,我们希望在实际实施之前获得一些反馈。

技术思考

起初我认为使用 WebRTC 可能是个好主意,但由于它目前仅在 Chrome、FF 和 Opera 上受支持而且几乎没有不支持本机移动应用程序,我们认为 WebRTC 目前可能不在考虑范围之内。 (或者你不这么认为?) 在网上搜索了一下之后,我们发现了这个:http://www.webrtc.org/native-code

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

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

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

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

如有任何关于该主题的想法,我们将不胜感激!谢谢!

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

鉴于上述假设,您的应用将面临的最大挑战是在不同 NAT 以及很多情况下多个 NAT 后面的移动客户端之间建立媒体(音频 and/or 视频)连接。如果这里没有服务器,你几乎不可能过得去。服务器将需要充当移动客户端媒体流的中继点。您将为媒体使用 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)。