现代的浏览器都支持webrtc,浏览器通过webrtc就可以直接注册sip账户到FreeSWITCH实现拨打和接听电话了。就可以不用额外安装软电话或者硬件的电话机,方便CRM等系统集成电话呼叫功能。
获取ssl证书
阿里云购买(阿里云有提供1年的免费证书,可以用来测试)
下载到3个文件域名_public.crt
域名.key
域名_chain.crt
这样的顺序放入wss.pem文件。
格式要求
—–BEGIN CERTIFICATE—–
—–END CERTIFICATE—–
—–BEGIN RSA PRIVATE KEY—–
—–END RSA PRIVATE KEY—–
—–BEGIN CERTIFICATE—–
—–END CERTIFICATE—–
如果购买的证书提供的不是这样的3个文件,只需要根据上面的格式放入,第一个段是CERTIFICATE(cert),第二个是RSA PRIVATE KEY(key),第三个是CERTIFICATE(chain)。解码证书的命令是 openssl x509 -in wss.pem -noout -text
- 把wss.pem放到fs证书目录
- 执行fs控制台命令
global_getvar certs_dir
也可以ssh终端执行fs_cli -x "global_getvar certs_dir"
查询到fs证书目录 - 把wss.pem copy到证书目录
- 也可以CCAdmin的SIP->internal->tls-cert-dir 修改这个路径
- 执行fs控制台命令
FreeSWITCH配置webrtc
- 设置webrtc使用的IP和端口
配置webrtc监听的SIP和端口,CCAdmin->SIP->internal->wss-binding设置为:7443(冒号需要的),监听本机所有端口,也可以0.0.0.0:7443 监听ipv4所有IP的7443端口,也可以指定单独一个本机IP比如192.168.31.100:7443,也可以指定其他端口后面的测试例子是用端口7564。建议不要用7443端口,很多客户用7443端口连接会不稳定,建议改用其他端口。
- 修改后要重启sofia模块才能生效
执行fs控制台命令reload mod_sofia
,也可以ssh终端执行 fs_cli -x "reload mod_sofia"
,或者CCAdmin运维调试界面SIP里面点一下restart。
查看修改是否生效
执行fs控制台命令
sofia status profile internal
,也可以ssh终端执行fs_cli -x "sofia status profile internal"
,或者CCAdmin运维调试界面SIP->internal后面点一下info(…),看到类似WSS-BIND-URL sips:mod_sofia@10.0.16.17:7564;transport=wss
这样的信息,就是端口绑定成功了。如果使用云服务器或者开启了防火墙,还需要把 wss端口放开一下(注意是TCP端口)。
域名解析到FS的外网IP
执行命令openssl s_client -connect sip.ddrj.com:7564 -showcerts
或openssl s_client -connect sip.ddrj.com:7564 -state
测试证书是否验证通过。
浏览器打电话测试
注意浏览器必须https打开的页面才可以使用webrtc。http页面会打开麦克风失败。
sipml5
sipml5官方网站 https://www.doubango.org/sipml5/ demo地址:https://www.doubango.org/sipml5/call.htm?svn=252
第二个界面设置好了点保存,然后回到第一个界面,点Login,如果登录成功了,恭喜你,前面的配置都对,拨打电话测试就可以了。
可以拨打echo,进行回音测试(路由里面启用放音测试),号码输入echo,点击Call->Audio,弹出是否允许使用耳麦,要勾选记住此决定。 如果听到自己说话的声音,就配置好了。
jssip
- 测试demo
jssip官方网站https://jssip.net/ demo地址:https://tryit.jssip.net/ demo源代码在https://github.com/versatica/tryit-jssip
保存设置,点下一步,进入呼叫界面,呼叫echo,过2-3秒,就会听到提示音了。为什么过2-3秒才可以听到声音,是因为默认使用了iceserver,可以自己下载demo代码tryit-jssip/lib/settingsManager.js
把pcConfig.iceServers这个删除了去。session_timer如果设置为true,会注册不上,因为fs的Session-Expires要求大于120,jssip的Session-Expires默认是90,可以改成false,或者修改fs Session-Expires的最小时间,也可以发起呼叫设置sessionTimersExpires为120以上的值。。contact_uri这个如果不设置fs的通话记录的被叫就没办法显示正确的分机号。例子默认是启用视频通话的,可以发起呼叫的参数里面关闭视频呼叫(tryit-jssip/lib/components/Phone.jsx)。
{
pcConfig : this.props.settings.pcConfig || { iceServers: [] },
mediaConstraints :
{
audio : true,
video : false
},
rtcOfferConstraints :
{
offerToReceiveAudio : 1,
offerToReceiveVideo : 0
}
});
//其他参考
var options = {
// 'eventHandlers' : eventHandlers,
'mediaConstraints': {'audio': true, 'video': false},
'extraHeaders': [],
'sessionTimersExpires': 180
};
- 代码下载
jssip下载地址https://jssip.net/download/releases/ 找到最新版本 下载 https://jssip.net/download/releases/jssip-3.9.1.min.js
- 第三方例子,可以联系顶顶通获取。
sipjs
sipjs的官方网站是 https://sipjs.com/ demo代码地址 https://github.com/onsip/SIP.js/tree/master/demo 因为官方没提供可以直接访问的demo,本文就不写测试过程了。可以联系顶顶通获取第三方例子。
faq
- 访问webrtc的页面必须是https的。
- iceserver 一定不要设置,设置了会导致呼出或者接听等几秒才有声音。
- 证书格式一定要对,如果证书不对会注册不上,可以通过浏览器直接访问 webrtc端口,例子( https://sip.ddrj.com:7564 )查看证书信息。
- 有的浏览器需要位置服务权限才可以获取到本机IP,需要允许位置服务和媒体的权限
- 有问题可以浏览器按F12看日志和F12网络看wss的SIP协议数据
- webrtc只支持 pcma,pcmu,opus这样几个编码,浏览器注册的分机,线路设置->编码设置要设置为pcma,pcmu,opus