前言
查阅了不少资料,网上对janus以及coturn的配置比比皆是, 不过, 我发现了一个问题, 那就是,
janus要直接对接coturn作为turn服务器吗?为什么?
janus的demo例子[譬如:video room]能不能在手机4g网络上面与pc端联通,看到双方的视频信息, 为什么?
网上的资料绝大部分都没有说明或者解决上面的问题, 导致的一个结果是, 根据网上的配置,顶多只能在本机, 或者同一个局域网里面使用,
并没有穿透nat的能力, 也达不到实际生产使用的起码标准.
ps:你可以看看之前配置的草稿,里面应该是遇到了很多人都会遇到的问题:
https://www.52play.net/blog/post?id=114
不过, 无论如何,下面给出这段时间不停试错参考过的资料:
janus官网:
https://github.com/meetecho/janus-gateway
其他:
阿里云实现Docker完整部署Janus-Gateway
Janus Webrtc服务的搭建
Janus在Ubantu下的安装与Https配置
janus前端demo网页部署说明:
Deploying Janus
其他:
coturn(turn)服务器搭建注意事项
云服务器搭建coturn不能正常使用的问题
https://blog.csdn.net/s569646547/article/details/50780682
https://blog.csdn.net/danfengw/article/details/68485223
701 error #1232
stun/turn服务器部署
always allocation timeout when connect to turn ( webrtc ) #397
https://blog.csdn.net/qq_29123057/article/details/91454733
https://stackoverflow.com/questions/36627529/coturn-turnserver-error-437-mismatched-allocation-wrong-transaction-id-webr
https://www.cnblogs.com/mobilecard/p/6542294.html
error 437: Mismatched allocation: wrong transaction ID #267
https://github.com/coturn/coturn/issues/459
https://blog.csdn.net/m0_37263637/article/details/102496005
https://blog.csdn.net/u012231640/article/details/83618274
配置
这篇文章不会讲述如何编译janus的,因为这部分内容也是相当有难度.假定已经对照官方文档编译通过了,且下面这些依赖都一一编译安装了:
域名配置https
具体请参考:
http://www.52play.net/blog/post?id=99
配置coturn
首先,coturn会安装一个
/usr/local/etc/turnserver.conf.default
的配置文件,那么就复制一份.
cp /usr/local/etc/turnserver.conf.default /usr/local/etc/turnserver.conf
然后编辑:
vim /usr/local/etc/turnserver.conf
下面是修改内容:
#LocalIP,内网ip
listening-ip=172.26.26.78
listening-port=3478
tls-listening-port=5349
#LocalIP,内网ip
relay-ip=192.168.1.100
#NetIP
## 官方配置文档有填写例子,例如:external-ip=60.70.80.91/172.17.19.101
external-ip=服务器公开ip[publicIP]/内网IP
#relay-threads=50 注释掉,
### 启用长时间验证机制.
lt-cred-mech
cert=/etc/ssl/cert/domain/cert.pem
pkey=/etc/ssl/cert/domain/privkey.pem
#配置一个用户名密码
user=user:password123
min-port=3480
max-port=3500
#--ps:下面有一个cli-password如果不设置什么的话会报cli-password错误无法启动之类的问题,那么就用默认的密码了.
cli-password=qwerty
#所用的域名
realm=domain.com
开放端口:
在阿里云上面开放相关端口,对了, 如果启用了防火墙firewall,那么也要设置开放端口:
firewall-cmd --add-port=3478/tcp --permanent
firewall-cmd --add-port=3478/udp --permanent
firewall-cmd --add-port=5349/tcp --permanent
firewall-cmd --add-port=5349/udp --permanent
firewall-cmd --add-port=3480-3530/udp --permanent
firewall-cmd --reload
添加启动以及关闭turnserver的脚本:
start.sh
#!/bin/sh
touch log.log
nohup /usr/local/bin/turnserver -c /etc/turnserver.conf >> log.log 2>&1 &
echo "如果没有错误,那就是成功启动了";
ps -ef|grep /usr/local/bin/turnserver
#tail -f log.log
stop.sh
#!/bin/sh
ps -ef|grep /usr/local/bin/turnserver |grep -v grep|awk '{printf $2}'|xargs kill -9
ps -ef|grep /usr/local/bin/turnserver
DATE=`date +%Y-%m-%d-%H-%M` #获取当前系统时间
mkdir logs
mv log.log logs/${DATE}_log.log
文件夹结构:
如果要查看日志,可以在当前文件夹下面执行:
tail -f log.log
配置janus
编辑配置文件:
vim /opt/janus/etc/janus/janus.jcfg
找到certificates配置项,在里面打开以下内容的配置,并设置。
certificates:
cert_pem = "/etc/ssl/cert/domain/cert.pem"
cert_key = "/etc/ssl/cert/domain/key.pem"
nat配置说明:
stun服务器配置:
stun_server = "stun.domain.net"
stun_port = 3478
nice_debug = false
###要配置nat_1_1_mapping,且为当前服务器的公共ip地址.
nat_1_1_mapping = "publicIP"
有很多参考资料有配置nat下面的turn_server,例如:
nat:
turn_server = "domain.com"
turn_port = 3478
turn_type = "udp"
turn_user = "user"
turn_pwd = "passwd123"
ice_enforce_list = "eth0"
不过我告诉你,不要乱设置了
原作者在issue里面有说明的:
这段话的意思是:
只有在janus服务器在内网里面没有公共ip[即外面没办法直接访问到的情况下]才需要设置turn server进行nat打洞,
这种情况下, turn server必须要配置在一台有独立ip的外网服务器上面,不能跟janus放在一起[turn server都没办法直接访问到,怎么打洞了..]
,如果janus可以直接访问的话,就不需要配置在janus.jcfg上面配置turn server了---janus不需要turn server给自己转发数据的...
所以, 在拥有独立ip的主机上面部署janus就不要在janus.jcfg上面配置turn server节点了.设置了的话注释掉然后重启janus服务.
再打开janus.transport.http.jcfg进行配置。
vim /opt/janus/etc/janus/janus.transport.http.jcfg
分别找到general、admin、certificates三项的配置处,修改以下配置(没有提到的不用动)。
general:
https = true
admin:
admin_https = true
certificates:
cert_pem = "/etc/ssl/cert/domain/cert.pem"
cert_key = "/etc/ssl/cert/domain/key.pem"
再打开janus.transport.websockets.jcfg进行配置。
vim /opt/janus/etc/janus/janus.transport.websockets.jcfg
分别找到general、admin、certificates三项的配置处,修改以下配置(没有提到的不用动)。
general:
wss = true
admin:
admin_wss = true
certificates:
cert_pem = "/etc/ssl/cert/domain/cert.pem"
cert_key = "/etc/ssl/cert/domain/key.pem"
开放端口:
##ps:在spi plugin的配置文件里面,rtp 传输数据时候需要用到20000-40000[默认]这个区间的端口, 需要在阿里云以及防火墙上面都放开.
firewall-cmd --add-port=20000-40000/udp --permanent
firewall-cmd --reload
启动以及关停脚本:
下面给出脚本方便启动服务以及关停服务:
start.sh
#!/bin/sh
touch log.log
nohup /opt/janus/bin/janus -C /opt/janus/etc/janus/janus.jcfg -d 5 -6 >> log.log 2>&1 &
echo "如果没有错误,那就是成功启动了";
ps -ef|grep /opt/janus/bin/janus
#tail -f log.log
stop.sh
#!/bin/sh
ps -ef|grep /opt/janus/bin/janus |grep -v grep|awk '{printf $2}'|xargs kill -9
ps -ef|grep /opt/janus/bin/janus
DATE=`date +%Y-%m-%d-%H-%M` #获取当前系统时间
mkdir logs
mv log.log logs/${DATE}_log.log
补充:
sip plugin默认配置rtp rtcp传输端口:
nginx配置
janus原本有 https://xxx:8089/janus之类的接口的,但是假定你已经用了https证书,那么要访问端口就显得很不方便了,
这一部分就来解决部署janus的前端网站[demo页面]的问题.
你可以直接官网的说明的:
Deploying Janus
还有, 官网的demo例子没有额外配置ice server---没有配置turn server的, 所以我们也需要在官网demo例子的js脚本里面修改以下内容:
iceServers:[xxxxxx] 就是我们等下需要配置的内容
ps:
先说明一下, 在不同网络,譬如,手机4g网络以及pc网站要互通,访问video room测试页面要能够看到双方的视频就必须要指定iceServers, 这也是绝大部分文章没有提及的点:
应该是很多人都没有部署到实际生产环境的打算.
nginx.conf的配置:
charset utf-8;
###1/注意要将root改成已经修改的页面存放目录
set $meet_res_path /home/hansonBoy/meet_webstatic/;
root $meet_res_path;
index index.php index.html index.htm;
access_log /var/log/nginx/access.log main;
###2/要注意特别映射janus.js因为这个与下面的/janus前面部分是一致的,如果不特别指出来nginx直接转发到8088去了.
location /janus.js {
alias $meet_res_path/janus.js;
}
###3/将janus转发到8088中.
location /janus {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8088/janus;
}
修改janus的demo页面
第一步, 将官方的demo程序下载下来----因为接下来我们需要改访问8089的前端逻辑啦,如下图所示:
ps:注意,官方demo用前端框架以及组件都是引用自cdn的--但我嫌cdn有时候很慢而且不知道什么时候会挂,所以cdn的东西也下载到本地了,前面几个文件夹就是装的这些,但是一般情况没必要这样做的, 麻烦得很.
下面修改8089逻辑:
搜索关键字可以得到:
官方demo中有这么多地方都要修改,
统一修改为:
第二,添加iceServer,
查找替换:
server: server,
替换为:
server: server,iceServers: [{urls: "turn:domain.com.cn:3478改成你自己的域名或ip", username: "user改成你自己的账号", credential: "123456改成你自己的密码"}],
第三上传到nginx指定的目录,比如,我在nginx指定代理的目录为:
/home/hansonBoy/meet_webstatic/
然后访问查看结果吧.
访问效果
电脑端:
手机端[移动4g网络,没有连接wifi]
————————————————
版权声明:本文为CSDN博主「码农下的天桥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cdnight/article/details/106982762