我正在考虑实施基于浏览器的VOIP解决方案,该解决方案使用SIP和WebRTC并连接到PTSN。基本上,用户给我他们的SIP凭证,我使用WebRTC来接收他们的麦克风和扬声器。在页面上,我打算运行一个SIP客户端。
如何实施来自PTSN的来电?我是否需要某种连接到用户SIP服务器的监听器?
我知道这是一个广泛的问题,但在网上进行一些研究后,我仍然对SIP来电的实施感到困惑。
答案 0 :(得分:5)
也许刷新这个值得努力。
WebRTC现已在Firefox和Chrome中实现(并且缺少IE,Edge和Safari)。
对于旧版SIP到WebRTC,需要进行一些转换。 使用WebRTC,您可以通过WebSocket使用任何信号。您可以实现您的专有协议,但是如果您正在寻找SIP兼容性,那么最自然的契合是WebSocket to SIP protocol。
WebRTC在DTLS / SRTP中对媒体进行编码,因此您必须在明确的RTP中对其进行解码。这意味着在服务器端要么使用内置WebRTC支持的软交换,要么使用WebRTC到SIP网关。确保选择具有完全媒体转码支持的软交换/网关。 WebRTC目前支持G.711,G.722和Opus。对于传统的SIP网络,您的服务器通常只选择G.711,一切都很完美。在某些情况下,您可能需要将媒体转换为其他流行的编解码器,例如G.729,G.723或GSM。
通常您有以下协议范围:
Softswitch支持WebRTC:
WebRTC到SIP网关:
支持SIP(RFC 7118)的WebRTC客户端:
此外,您应该部署和使用自己的STUN和TURN服务器(某些服务器/网关具有这些内置,否则使用coturn rfc5766-turn-server)。
服务器端启动并运行后,您可以根据上述webrtc客户端轻松创建自定义客户端解决方案,因为每个客户端都有一个易于使用的JavaScript API。
答案 1 :(得分:4)
您需要一台实现SIP-WebRTC网关的服务器。网关将能够通过SIP接收来自SIP提供商(其本身将通过转换ISDN-SIP,SS7-SIP等充当SIP-PSTN网关)的来电,然后使用WebRTC将呼叫转发到基于浏览器的客户端。
换句话说,您的服务器需要是SIP服务器和HTTP服务器的组合,HTTP服务器需要支持Web套接字和WebRTC API。
如果您还没有看过Phono SDK这是一个很好的起点。
<强>更新强>
自从我上次关注WebRTC以来,情况有所改变。现在似乎在javascript实现中有一些SIP利用新的WebRTC API用于媒体方面。使用SIP-javascript堆栈的浏览器应用程序不需要任何其他服务器,可以直接连接到现有的SIP服务器。我发现的一个例子是sip-js,但我相信还有其他一些例子。
答案 2 :(得分:3)
理论上,您可以使用开源软交换(FreeSWITCH,Asterisk)项目部署SIP服务器并购买&#34; SIP中继&#34;服务以获取电话号码和路由到/来自PSTN的呼叫。然后,您可以配置WebRTC SIP客户端以使用您的服务器。有开源JavaScript库(SIP.js,JsSIP,sipML5)。
如果您的工作规模较小且非常习惯于运营电信基础设施,那么这可能是您的最佳选择。购买线槽。实际上,将PSTN运行到WebRTC调用可能很困难 - 很多质量问题。我也不知道你想要在多大程度上构建你的应用程序,但是你的SIP服务器有超过100个同时连接,你需要处理扩展。如果您希望托管解决方案能够减少电信问题,您可以使用SIP.js并注册OnSIP(支持SIP.js的公司),这是一种即用即付服务,可让您使用购买电话号码,然后为您的客户编码。 SIP.js用户代理构造如下所示:
var userAgent = new SIP.UA({
uri: 'bob@example.onsip.com',
wsServers: ['wss://sip-ws.example.com'],
authorizationUser: sipUsername,
password: sipPassword
});
如果您选择OnSIP(托管),则这些凭据由服务提供并注册OnSIP。如果您选择部署自己的SIP服务器,则会相应地更改。
答案 3 :(得分:0)
解决您的问题的方法是: