VoIP集成在应用程序和网站中

11

我有一个关于如何在我们的移动应用和Web应用程序中实现VoIP的一般性问题(我们有一个基于AngularJS / NodeJS的Android + iOS应用和Web应用程序)。

我们想要达到的目标

第一步,我们想要实现应用程序间的语音和视频通话。稍后,我们可能会扩展到普通电话网络的呼出。但是这篇文章主要是为了获取有关如何仅实现我们的第一步的信息。

一般思路

我们之前有一些Asterisk的经验,结果证明这很难。因此,在实际实施任何内容之前,我们希望获得一些反馈。

技术思路

起初,我认为使用WebRTC可能是一个好主意,但由于目前只支持Chrome、Firefox和Opera,并且对本地移动应用程序几乎不支持,所以我们认为WebRTC现在可能没有戏。 (您是否有其他想法?) 在搜索更多网络后,我们发现了这个:http://www.webrtc.org/native-code

有人使用过这些库吗?对我们来说,这似乎是现代VoIP解决方案的最佳选择(也将允许我们跳过Asterisk服务器)

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

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

既然我们不是VoIP专家,那么有没有其他将VoIP整合到我们应用程序中的可能性?

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

1个回答

5
主要因素是您的应用程序将使用的网络配置。考虑到您正在使用移动客户端和Web应用程序,几乎可以肯定您正在使用互联网,并且很可能会混合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)。

感谢您详细的回答!如果我在您的回答中理解有误,请告诉我,但是在我看来,您的大部分帖子都是关于对普通电话网络的呼出电话,对吗?在过去的几天里,我们进行了大量的研究,目前似乎对于我们来说,一个WebRTC解决方案用于应用程序间通信可能已经足够了(也许需要STUN/TURN服务器,老实说我们还没有足够的知识,因为我们只处于头脑风暴阶段)。只有当我们想要在自己的网络之外拨打电话时,才需要SIP提供商,对吗? - Markus
不,我的回答根本不涉及PSTN呼叫。SIP、WebRTC、XMPP或其他选择之间的选择仍然是次要的问题。如何管理RTP流(SIP、WebRTC和XMPP都用于音频和视频)是首要问题。如果“在您自己的网络之外”意味着您可以将所有通话保留在单个私有网络中,每个设备都可以直接访问其他设备,那么处理RTP就容易得多。 - sipsorcery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接