使用SIP和WebRTC的传入呼叫

使用SIP和WebRTC的传入呼叫,sip,voip,webrtc,Sip,Voip,Webrtc,我正在考虑实施基于浏览器的VOIP解决方案,该解决方案使用SIP和WebRTC,并连接到PTSN。基本上,用户给我他们的SIP凭据,我使用WebRTC访问他们的麦克风和扬声器。在页面上,我计划运行一个SIP客户端 如何实现来自PTSN的传入呼叫?我是否需要某种连接到用户SIP服务器的侦听器 我知道这是一个广泛的问题,但在网上做了一些研究之后,我仍然对传入呼叫的SIP实现有些困惑。您需要一个实现SIP WebRTC网关的服务器。网关将能够通过SIP接收来自SIP提供商(其本身将通过转换ISDN-S

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

如何实现来自PTSN的传入呼叫?我是否需要某种连接到用户SIP服务器的侦听器


我知道这是一个广泛的问题,但在网上做了一些研究之后,我仍然对传入呼叫的SIP实现有些困惑。

您需要一个实现SIP WebRTC网关的服务器。网关将能够通过SIP接收来自SIP提供商(其本身将通过转换ISDN-SIP、SS7-SIP等充当SIP-PSTN网关)的传入呼叫,然后使用WebRTC将呼叫转发给基于浏览器的客户端

换句话说,您的服务器需要是SIP服务器和HTTP服务器的组合,HTTP服务器需要支持web套接字和WebRTC API

如果你还没有看一看,这是一个很好的起点

更新:


自从我上次看WebRTC以来,事情有了一些进展。现在,在javascript实现中似乎确实存在一些SIP,它们利用新的WebRTC API实现媒体方面的功能。使用SIPJavaScript堆栈的浏览器应用程序不需要任何额外的服务器,可以直接连接到现有的SIP服务器。我发现的一个例子是,但我相信也有其他例子。

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

如果您的工作规模较小,并且非常习惯于运营电信基础设施和购买集群,那么这可能是您的最佳选择。在实践中,运行PSTN到WebRTC的呼叫可能会很困难——存在很多质量问题。我也不知道您希望以何种规模构建应用程序,但同时连接到SIP服务器的连接超过100个,您需要处理扩展问题。如果你想要一个托管的解决方案来减少电信方面的麻烦,你可以使用SIP.js并注册OnSIP(公司支持),这是一种按量付费的服务,可以让你购买电话号码,只需给你的客户编码。SIP.js用户代理构造如下所示:

var userAgent = new SIP.UA({
  uri: 'bob@example.onsip.com',
  wsServers: ['wss://sip-ws.example.com'],
  authorizationUser: sipUsername,
  password: sipPassword
});

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

也许这方面的更新是值得努力的

现在已在Firefox和Chrome中实现(IE、Edge和Safari中缺失)

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

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

通常,您有以下协议覆盖:

  • 信令(这很简单):TLS中WebSocket上的SIP->UDP/TCP上的清除SIP
  • 媒体(这更复杂):DTLS/SRTP编码的RTP和PCMU->清除RTP和PCMU
支持WebRTC的软交换:

  • (适用于linux)
  • (linux和windows)
  • (适用于windows)
  • (适用于linux)
WebRTC到SIP网关:

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

  • (来自dubango)
  • (旧货物)
  • (Jssip的继任者)
  • (也适用于IE和Edge)
  • (使用drupal插件)
此外,您还应该部署和使用自己的STUN和TURN服务器(有些服务器/网关具有这些内置的,否则使用)


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

解决问题的方法是:

  • Webrtc自身作为rtpengine工作。因此,使用sip凭据,您可以将自己注册到wss或ws到sip服务器。然后您可以呼叫其他sip用户或出站
  • 呼叫将从那里击中sip服务器sip服务器决定其入站呼叫还是出站呼叫

我见过phono,我可能会将其作为客户端实现。我想让我的用户去谷歌,输入“voip SIP提供商”,并从这些提供商之一获得一个帐户。一旦他们获得了这样一个帐户,这些提供商是否提供了您所说的内容?有没有可能避免让我的服务器参与所有这一切?您可能还想看看。这篇关于WebRTC数据通道的教程也刚刚弹出。请注意,WebRTC根本不要求SIP,您可以协商以任何方式设置数据通道,SIP只是一个选项。您可以为我提供一个完整的示例或任何教程。以及如何使用WebRTC。如何在eclipse中添加,如何在java类中访问等