1 概述
? ? ? ? ? Janus 是由 Meetecho 開發的通用 WebRTC 服務器,它為構建 WebRTC 應用程序提供了一個模塊化框架。服務器目標:Janus WebRTC 網關被設計為輕量級、通用的 WebRTC 服務器,除了實現以下方法外,它本身不提供任何功能:
- 設置與瀏覽器的 WebRTC 媒體通信
- 在客戶端和服務器之間交換 JSON 消息
- 在瀏覽器和服務器端應用程序邏輯之間中繼 RTP/RTCP 和消息
????????實際功能是在瀏覽器通過 Janus 核心連接的服務器端插件中實現的。這種模塊化架構允許占用空間小,同時提供最大的靈活性。
1.1 主要特點
- 模塊化架構:將核心 WebRTC 功能與應用程序特定邏輯分離
- 輕量級核心:用 C 語言編寫,占用空間小
- 插件系統:可通過各種應用程序(視頻會議、流媒體、SIP 網關等)的插件進行擴展
- 多種傳輸機制:支持 HTTP/REST、WebSockets、RabbitMQ、MQTT 和 Unix 套接字
- 會話管理:處理連接、WebRTC 會話和插件附件
- 媒體處理:處理媒體協商、編碼和傳輸
- 錄制功能:支持錄制 WebRTC 會話
2 janus搭建
云服務器端口開放(本地虛擬機環境則關閉防火墻即可)需要在安全組開放端口:
TCP/UDP 3478
UDP 30000-60000
2.1基礎環境
sudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev libsofia-sip-ua-dev libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt libtool automake libglib2.0-dev cmake libconfig-dev libssl-dev doxygen graphviz libavcodec-dev libavformat-dev libswscale-dev libavutil-dev
2.2 源碼安裝依賴
2.2.1 安裝 WebSocket
git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
git branch -a 查看選擇最新的穩定版本,
git checkout v4.3.0 切換到較新穩定版本
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make && sudo make install
2.2.2 安裝 libsrtp
git clone https://gitee.com/MediaNext/libsrtp.git
cd libsrtp
git checkout v2.3.0
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
2.2.3 安裝libmicrohttpd
wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.71.tar.gz
tar zxf libmicrohttpd-0.9.71.tar.gz
cd libmicrohttpd-0.9.71/
./configure
make
sudo make install
2.2.4安裝nginx
wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar xvzf nginx-1.15.8.tar.gz
cd nginx-1.15.8/# 配置,一定要支持https
./configure --with-http_ssl_module make
sudo make install
2.3 編譯 Janus
git clone https://github.com/meetecho/janus-gateway.git
git tag 查看當前的 tag,選擇最新穩定的版本v0.10.4
git checkout v0.10.4
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets --enable-post-processing
make
sudo make install
3 配置文件和運行janus
3.1 基礎環境配置
3.1.1 基于https生成ssl證書
mkdir -p ~/cert
cd ~/cert
# CA私鑰
openssl genrsa -out key.pem 2048
# 自簽名證書
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
3.1.2設置全局域名IP對應關系
后面需要填寫一大堆ip,為了方便修改ip我們在 Ubuntu 中將 IP 作為全局域名的常見設置。
vim?/etc/hosts
#新增域名 格式你的云服務器ip+本地環境的域名。后續填寫域名即可
#本地就用127.0.0.1
117.111.111.111 janusserver.com
3.1.3修改nginx配置文件
janus服務器程序文件夾在/opt/janus/
基于nginx配置文件重定向至 /opt/janus/share/janus/demos
# HTTPS serverserver {listen 443 ssl;server_name localhost;# 配置相應的keyssl_certificate /home/ubuntu/cert/cert.pem;ssl_certificate_key /home/ubuntu/cert/key.pem;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {# 指向janus demo所在目錄root /opt/janus/share/janus/demos;index index.html index.htm;}}
啟動nginx
sudo /usr/local/nginx/sbin/nginx
然后通過訪問?https://127.0.0.1/?。可以看到界面,但此時還不能正常通話。
3.1.4?安裝和啟動coturn
打洞服務器,本地測試可忽略。
sudo apt-get install libssl-dev
sudo apt-get install libevent-dev#git clone https://github.com/coturn/coturn
#cd coturn
# 提供另一種安裝方式turnserver是coturn的升級版本
wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
tar xfz turnserver-4.5.0.7.tar.gz
cd turnserver-4.5.0.7./configure
make && sudo make installsudo nohup turnserver -L 0.0.0.0 --min-port 50000 --max-port 60000 -a -u 用戶名:密碼-v -f -r nort.gov &
3.2 janus 配置文件之Video room功能
janus配置
janus安裝目錄在/opt/janus。文件結構:
./bin | ./etc | ./include | ./lib | ./share |
可執行文件 | janus配置文件 | janus頭文件 | janus庫 | 存放腳本或者文檔,web demo也在這里 |
需要配置的文件為(目錄/opt/janus/etc/janus)先備份。先把.sample后綴的文件拷貝成jcfg后綴
# 進到對應的目錄
cd /opt/janus/etc/janus
# 拷貝文件cp janus.jcfg.sample janus.jcfgcp janus.transport.http.jcfg.sample janus.transport.http.jcfgcp janus.transport.websockets.jcfg.sample janus.transport.websockets.jcfgcp janus.plugin.videoroom.jcfg.sample janus.plugin.videoroom.jcfgcp janus.transport.pfunix.jcfg.sample janus.transport.pfunix.jcfgcp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.jcfgcp janus.plugin.recordplay.jcfg.sample janus.plugin.recordplay.jcfgcp janus.plugin.voicemail.jcfg.sample janus.plugin.voicemail.jcfgcp janus.plugin.sip.jcfg.sample janus.plugin.sip.jcfgcp janus.plugin.nosip.jcfg.sample janus.plugin.nosip.jcfgcp janus.plugin.textroom.jcfg.sample janus.plugin.textroom.jcfgcp janus.plugin.echotest.jcfg.sample janus.plugin.echotest.jcfg
3.2.1 配置janus.jcfg
#大約202行左右,設置udp端口范圍。
rtp_port_range = "50000-60000"
# 237行
stun_server = janusserver.comstun_port = 3478nice_debug = false
# 大概267行 填寫云服務器外網ip地址
nat_1_1_mapping = janusserver.com#打洞服務器配置大概274行
# credentials to authenticate...turn_server = janusserver.comturn_port = 3478turn_type = "udp"turn_user = 用戶名turn_pwd = 密碼
rtp_port_range = "50000-60000"
3.2.2 配置janus.transport.http.jcfg
general: {json = "indented" base_path = "/janus" threads = "unlimited" http = true port = 8088 https = true secure_port = 8089
}certificates: {cert_pem = "/root/cert/cert.pem"cert_key = "/root/cert/key.pem"#cert_pwd = "secretpassphrase"#ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}
3.2.3 配置janus.transport.websockets.jcfg?
general: {json = "indented" ws = true ws_port = 8188 wss = true wss_port = 8989
}
certificates: {cert_pem = "/root/cert/cert.pem"cert_key = "/root/cert/key.pem"#cert_pwd = "secretpassphrase"#ciphers = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
}
3.3 修改.js文件,指定wss協議
/opt/janus/share/janus/demos/videoroomtest.js
var server = "wss://" + window.location.hostname + ":8989";
3.4 配置coturn地址
本地測試無需打洞,部署云服務且使用打洞才需要這一步。
/opt/janus/share/janus/demos/videoroomtest.js
這里要寫你的服務器ip,使用本地域名方式解析不出來
#83行添加server: server,iceServers :[{urls: ["turn:127.0.0.1(這里要寫你的服務器ip,使用域名解析不出來):3478?transport=udp","turn:127.0.0.1(同理):3478?transport=tcp" ],username: "jbj",credential: "123456"},{urls: ["stun:127.0.0.1:3478"]}],success: function()
3.5?運行
涉及服務啟動有點多,在這里進行總結。
#nginx啟動
sudo /usr/local/nginx/sbin/nginx
#啟動coturn
sudo nohup turnserver -L 0.0.0.0 --min-port 50000 --max-port 60000 -a -u 用戶名:123456 -v -f -r nort.gov &
#jauns運行
/opt/janus/bin/janus --debug-level=5 --log-file=$HOME/janus-log
訪問
https://IP/
或者
https://IP/videoroomtest.html
4.效果?
學習資料分享
0voice · GitHub