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]

 

 

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