SIP和WebRTC的来电

fre*_*hie 9 voip sip webrtc

我正在考虑实施基于浏览器的VOIP解决方案,该解决方案使用SIP和WebRTC并连接到PTSN.基本上,用户给我他们的SIP凭证,我使用WebRTC来接收他们的麦克风和扬声器.在页面上,我计划运行SIP客户端.

如何实现来自PTSN的来电?我是否需要某种连接到用户SIP服务器的监听器?

我知道这是一个广泛的问题,但在网上做了一些研究之后,我仍然对SIP来电的实施感到困惑.

sip*_*wiz 5

您需要一台实现 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,但我相信还有其他例子。


小智 5

理论上,您可以使用开源软交换(FreeSWITCH,Asterisk)项目部署一个SIP服务器,并购买“SIP中继”服务来获取电话号码并路由到/来自PSTN的呼叫。然后,您可以配置 WebRTC SIP 客户端以使用您的服务器。有开源 JavaScript 库(SIP.js、JsSIP、sipML5)。

如果您是小规模工作并且习惯于运行电信基础设施和购买中继,那可能是您的最佳选择。在实践中,运行 PSTN 到 WebRTC 呼叫可能很困难——有很多质量问题。我也不知道您希望以什么规模来构建您的应用程序,但是超过 100 个同时连接到您的 SIP 服务器,您将需要处理扩展问题。如果您想要一个托管解决方案来消除电信方面的麻烦,您可以使用 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
});
Run Code Online (Sandbox Code Playgroud)

如果您选择 OnSIP(托管),则这些凭据由服务提供并在 OnSIP 中注册。如果您选择部署您自己的 SIP 服务器,您将相应地进行更改。


Ist*_*van 5

也许刷新这个值得付出努力.

WebRTC现在在Firefox和Chrome中实现(并且缺少IE,Edge和Safari).

对于传统SIP到WebRTC,需要进行一些转换.使用WebRTC,您可以通过WebSocket使用任何信号.您可以实现您的专有协议,但是如果您正在寻找SIP兼容性,那么最自然的适合是WebSocket到SIP协议.

WebRTC在DTLS/SRTP中对媒体进行编码,因此您必须在清除RTP中对其进行解码.这意味着在服务器端要么使用内置WebRTC支持的软交换,要么使用WebRTC到SIP网关.确保选择具有完全媒体转码支持的软交换/网关.WebRTC目前支持G.711,G.722和Opus.对于传统的SIP网络,您的服务器通常只选择G.711,一切都很完美.在某些情况下,您可能需要将媒体转换为其他流行的编解码器,例如G.729,G.723或GSM.

通常您有以下协议覆盖:

  • 信令(这很简单):TLS中的SIP over WebSocket - >清除基于UDP/TCP的SIP
  • 媒体(这更复杂):DTLS/SRTP编码带有PCMU的RTP - >带有PCMU的清晰RTP

支持WebRTC的Softswitch:

WebRTC到SIP网关:

支持SIP(RFC 7118)的WebRTC客户端:

您还应该部署和使用自己的STUN和TURN服务器(某些服务器/网关具有这些内置,否则使用coturn rfc5766-turn-server).

一旦服务器端启动并运行,您就可以基于上述webrtc客户端轻松创建自定义客户端解决方案,因为每个客户端都有一个简单易用的JavaScript API.