janus以及coturncentos8的配置_排错填坑完结篇

前言

查阅了不少资料,网上对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]

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章