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

步炯
2023-12-01



前言

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

 类似资料: