将 Asterisk 与 WebRTC 集成——从头开始

Integrating Asterisk with WebRTC - ground up

我正在尝试将 Asterisk 与 webRTC 集成。发布了一个查询 here,但它几乎没有提供任何解决方案。

我已经有了一个基本的 webRTC 基础设施,我已经对其进行了概念验证测试。我使用 socket.io 进行信号传输,COTURN 用于 STUN/TURN 和 node.js 以及我的网络服务器的支持模块。 我使用 MySQL 来保持会话。 我的 asterisk 安装在 SIP 电话和 PSTN 接口的 PRI 卡上运行良好。我的 Asterisk、网络服务器和其他支持服务器 运行 在同一个盒子上。

在 Asterisk here and on sipjs here(和其他类似产品站点)上有将 Asterisk 与 WebRTC 集成的说明。 从我那里的阅读来看,似乎 Asterisk 有一个内置的网络服务器来支持 wss,使用 pjproject 来支持 ICE,TURN/STUN 服务器等等。 我看到采用此处的方法将意味着复制基础设施。

我想实现一个从 WebRTC 到 SIP 或 DAHDI 通道的音频网关。这本质上是从浏览器到 PSTN 号码或 SIP 端点的音频呼叫。 我的看法是,根据我的现有情况,我将需要以下内容:

我想这一定是以前实施过的。我找不到这方面的任何解决方案或讨论。

我走错路了吗? 我是在重新发明轮子吗? 任何指导将不胜感激。

这里"implemented"没什么可说的。所有列出的要点都已在 Asterisk 中实现。

您提到的链接主要讨论旧版本的 Asterisk。我建议使用 WebRTC on Asterisk 13.

的最新指南

A codec transcoder for audio (Browser codec to Asterisk codec), possibly Kurento.

Asterisk 默认内置转码。然而,WebRTC 也支持 G.711(PCMU 和 PCMA),所以很可能你永远不需要转码。

Some way to convert a WebRTC SDP to an Asterisk SDP.

这已经由 Asterisk 和所有流行的 WebRTC SIP 客户端(sip.js, webphone, sipml5)使用 RFC 7118(SIP 协议的 WebSocket)处理。我强烈建议您使用此协议,而不是将 socket.io 与您的自定义协议一起使用。 (Socket.io 无论如何在所有现代浏览器中都使用 websocket,当 webrtc 不可用时,webrtc 也会丢失)

Some way to "register" a logical webRTC peer to the SIP proxy(Asterisk).

这就像上面提到的通常在 websocket 上的 SIP REGISTER

Some intermediate module for Asterisk to think of a WebRTC peer as a SIP end point.

这不需要额外的东西。按照我上面提到的指南设置 WebRTC 扩展(就像其他 SIP 扩展一样,WebRTC 可以在配置后与 SIP 通信)。

请注意,如果您的 Asterisk 具有 public 静态 IP,您很可能甚至不需要 TURN 和 STUN。 (除了一些基本的 STUN,它是 ICE 协议的一部分并且已经内置在 Asterisk 中)