我正在尝试将 Asterisk 与 webRTC 集成。 here发布了一个查询,但它几乎没有提供任何解决方案。
我已经有了一个基本的 webRTC 基础设施,我已经对其进行了概念验证测试。我使用 socket.io 进行信号传输,使用 COTURN 与 Node.js 进行 STUN/TURN 以及网络服务器的支持模块。 我使用 MySQL 来保持会话。 我的星号安装与 SIP 电话和 PSTN 接口的 PRI 卡配合良好。我的 Asterisk、网络服务器和其他支持服务器在同一个盒子上运行。
Asterisk here 和 sipjs here(以及其他类似产品网站)上有将 Asterisk 与 WebRTC 集成的说明。 从我的阅读来看,Asterisk 似乎有一个内置的网络服务器来支持 wss,使用 pjproject 来支持 ICE、TURN/STUN 服务器等。 我发现在这里采用这种方法意味着重复基础设施。
我想实现一个从 WebRTC 到 SIP 或 DAHDI 通道的音频网关。这本质上是从浏览器对 PSTN 号码或 SIP 端点的音频呼叫。 我认为,根据我现有的条件,我将需要以下内容:
我想这一定是以前实施过的。我无法找到这个方向的任何解决方案或讨论。
我是不是走错了路? 我是在重新发明轮子吗? 任何指导将不胜感激。
这里没有什么可以“实施”的。所有列出的要点都已在 Asterisk 中实现。
您提到的链接主要讨论旧版本的 Asterisk。我建议使用最新的 Asterisk 13 上的 WebRTC 指南。
音频编解码器转码器(浏览器编解码器到星号编解码器), 可能是库伦托。转码默认内置 Asterisk。然而,WebRTC 还支持 G.711(PCMU 和 PCMA),因此您很可能永远不需要转码。
将 WebRTC SDP 转换为 Asterisk SDP 的某种方法。Asterisk 和所有流行的 WebRTC SIP 客户端(
sip.js、webphone、sipml5)已使用 RFC 7118(SIP 协议的 WebSocket)处理此问题。我强烈建议使用它,而不是将 socket.io 与您的自定义协议一起使用。 (Socket.io 在所有现代浏览器中都使用 websocket,当 webrtc 不可用时,webrtc 也会丢失)
将逻辑 webRTC 对等点“注册”到 SIP 的某种方法 代理(星号)。这就像上面提到的 websocket 上通常的 SIP REGISTER
Asterisk 的一些中间模块将 WebRTC 对等体视为 SIP 端点。为此不需要任何额外的东西。按照我上面提到的指南设置 WebRTC 扩展(就像其他 SIP 扩展一样,一旦配置,WebRTC 就可以与 SIP 通信)。
请注意,如果您的 Asterisk 有公共静态 IP,您很可能甚至不需要 TURN 和 STUN。 (除了一些基本的 STUN,它是 ICE 协议的一部分并且已经内置在 Asterisk 中)
Siperb 的灵感来源。然后,下一步很自然地为人们提供将这款手机连接到任何 Asterisk 盒子(甚至更旧的盒子)或托管盒子所需的工具。如果您不愿意接受 sip.js 或 sipml5 的挑战,请前往 https://www.siperb.com/