1 webrtc简介
WebRTC,名称源自 网页即时通信 (英语:Web Real-Time Communication)的缩写,是一个支持网页浏览器进行实时语音对话或视频对话的API。它于2011年6月1日开源并在Google、Mozilla、Opera支持下被纳入万维网联盟的W3C推荐标准。 WebRTC 适用于许多不同的应用场景,从使用摄像头或麦克风的基本 Web 应用,到更高级的视频通话应用和屏幕共享,不一而足。本文用代码实现一个语音通话的demo,以便更好地说明该技术的工作原理及用途。
以B2BUA(Back-to-Back User Agent,背靠背用户代理)模式为例,快速实现webrtc语音通话,B2BUA模式也是webrtc最常见的模式,架构图如下所示 如架构所示,要想实现webrtc语音通话,要分别实现服务端和客户端
2 实现服务端
服务端实现方式
方式 | 说明 | 优点 | 缺点 |
---|---|---|---|
FreeSwitch | 开源的软交换系统,支持linux和win系统 | 开源、免费、易于扩展 | 对技术要去较高,安装繁琐 |
通信猫 | saas模式软件换系统,web架构 | 注册即可使用,费用低 | 新系统 |
vos | vos是商业软件cs架构模式 | 老牌的软交换系统,市场占有率高,系统稳定 | 价格昂贵10W起步 |
如果财大气粗可以直接购买vos,下面主要介绍FreeSwitch和通信猫
2.1 用FreeSwitch实现服务端
下面的步骤假定你已搭建完FreeSwitch并实现可以用客户端软件(eyeBeam、MicroSIP、linphone.....)通信。
- 安装证书 如果有域名建议直接在https://freessl.cn/ 申请一个免费证书,如果没有域名直接跳过此步骤,区别是没有证书只能使用ws协议而不能使用wss协议,且使用ws协议时需要对浏览器进行设置,如果你只是用于测试区别不大,如果想用到生产环境还是最好使用wss。 以nginx类型证书为例,先合并证书
cat xxx.pem xxx.key > wss.pem
然后将合并过的证书上传到 /usr/local/freeswitch/certs 2. 修改配置 在 /usr/local/freeswitch/conf/sip_profiles/internal.xml 确定这两行代码没有被注释掉
<param name="ws-binding" value=":5066"/>
<param name="wss-binding" value=":7443"/>
第一行代码表示支持ws协议,使用5066端口;第二行代码表示支持wss协议,使用7443端口 还是在该文件中添加这两行代码
<param name="apply-candidate-acl" value="rfc1918.auto"/>
<param name="apply-candidate-acl" value="wan.auto"/>
用户处理NAT相关问题 至此用FreeSwitch实现服务端已经完成.
2.2 用通信猫实现服务端
用通信猫实现服务端非常简单,在https://www.tongxinmao.net注册账户。 在下面这个位置可以看到wss地址信息
至此用通信猫实现服务端已经完成.
3 实现客户端
客户端实现方式网上是五花八门,真正可以直接使用的非常少,sip.js是实现客户端最多的一种,笔者已经用sip.js搭建好客户端,你只需要填写wss或ws地址、话机、话机密码即可使用 打开https://webrtctest.tongxinmao.net/ 网址如下图所示
3.1 话机和话机密码获取方式
- 如果你是用FreeSwitch搭建的后端在/usr/local/freeswitch/conf/directory/default 可以看到用户信息,安装完FreeSwitch会初始化1000~1019这20个用户,密码是1234
- 如果你是用通信猫实现的后端,你用下面方式创建两个用户即可 网关管理->话机管理 点击新增 选择客户 输入电话号码1001 输入密码 然后点击确定, 然后再用同样的方式创建坐席1002
3.2 协议和端口选择
有证书或用通信猫搭建的后端, 协议选择wss, 端口用7443 没有证书 协议选择ws,端口用5066,并且需要对浏览器进行配置(火狐在地址栏输入 about:config,将network.websocket.allowInsecureFromHTTPS改为false,谷歌好像没有类似选项)
至此就可以webrtc前后端均已实现
4 相关源码
前端源码地址在https://gitee.com/ydy123/webrtc-webphone
5 帮助或交流
如果需要帮助或交流欢迎扫码联系我