9

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

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

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

4

4 回答 4

7

也许为此刷新是值得的。

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 或 GS​​M。

通常你有以下协议覆盖:

  • 信令(这很简单):TLS 中基于 WebSocket 的 SIP -> 通过 UDP/TCP 清除 SIP
  • 媒体(这个比较复杂):DTLS/SRTP 编码 RTP with PCMU -> clear RTP with PCMU

支持 WebRTC 的软交换:

WebRTC 到 SIP 网关:

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

你也应该部署和使用你自己的 STUN 和 TURN 服务器(一些服务器/网关有这些内置的,否则使用coturn rfc5766-turn-server)。

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

于 2016-03-13T19:57:18.973 回答
6

理论上,您可以使用开源软交换(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
});

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

于 2014-06-24T20:53:18.217 回答
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,但我相信周围还有其他的。

于 2012-12-15T23:49:21.897 回答
0

您的问题的解决方案是:

  • Webrtc 其自身工作为 rtpengine.so 使用 sip 凭据,您可以使用 wss 或 ws 将您自己注册到 sip 服务器。然后您可以调用其他 sip 用户或出站。
  • 呼叫将从那里打到 sip 服务器 sip 服务器决定天气它的呼入或呼出
于 2016-03-14T12:29:04.553 回答