1. 環境准備
注意:必須使用搜狗或chrome瀏覽器,360極速瀏覽器需要設置 “全部使用blink內核” 才能正常使用。
需要開放安全組端⼝: coturn: UDP 30000-60000 TCP/UDP 3478 nginx: TCP 80、443 Video Room: TCP 8088、8188、8089、8989
需要啟動的組件:nginx、coturn、janus。需要修改janus配置文件中的turn/stun的ip。
以下組件最后都安裝到了系統目錄,或許可以放置到不同地方進行安裝,下面都在同級目錄下載安裝。
新建用戶:
ssh -o ServerAliveInterval=30 root@ useradd -s /bin/bash -u 544 -d /home/janus -g root -m janus passwd janus chmod u+rw /etc/sudoers && vim /etc/sudoers # 在root下添加:janus ALL=(ALL:ALL) ALL su janus mkdir ~/janus && cd ~/janus
sudo vim /etc/default/useradd 修改 $SHELL 為 SHELL=/bin/sh 否則可能出現動態庫找不到的問題。因為bash、sh環境是不同的。
安裝依賴:
sudo apt update sudo apt-get install -y git aptitude cmake sudo aptitude install -y libmicrohttpd-dev libjansson-dev libnice-dev libssl-dev libsrtp0-dev libsofia-sip-ua-dev sudo aptitude install -y libglib2.0-dev libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt libtool automake sudo aptitude install -y libconfig-dev doxygen graphviz libavcodec-dev libavformat-dev libswscale-dev libavutil-dev export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/pkgconfig
libnice在上面已經安裝了。下面不用裝了。pkgconfig:參考
初始化
WORK_PATH=~/janus
mkdir $WORK_PATH && cd $WORK_PATH
安裝websocket
git clone https://github.com/warmcat/libwebsockets.git cd libwebsockets && git checkout v3.2-stable mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" .. make && sudo make install
cd $WORK_PATH
安裝libsrtp
wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz tar xf v2.2.0.tar.gz cd libsrtp-2.2.0 4 ./configure --prefix=/usr --enable-openssl make shared_library && sudo make install
cd $WORK_PATH
安裝libusrsctp
git clone https://github.com/Kurento/libusrsctp.git cd libusrsctp ./bootstrap ./configure make && sudo make install
cd $WORK_PATH
安裝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
cd $WORK_PATH
2. 安裝Janus
git clone https://github.com/meetecho/janus-gateway.git cd janus-gateway git checkout v0.10.4 sh autogen.sh ./configure --prefix=/opt/janus --enable-websockets --enable-postprocessing --enable-docs --enable-rest --enable-data-channels make && sudo make install # && sudo make configs
cd $WORK_PATH
然后去/opt/janus/bin下面去執行janus試試
3. nginx配置
先配置密鑰:
CERT_PATH=~/cert mkdir $CERT_PATH && cd $CERT_PATH
openssl genrsa -out key.pem 2048 echo -e "\n\n\n\n\n\n\n" | openssl req -new -x509 -key key.pem -out cert.pem -days 1095
安裝nginx:
mkdir ~/nginx && cd ~/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/ ./configure --with-http_ssl_module make && sudo make install
打開http server組的注釋,對證書路徑、janus的root路徑(默認就是這個)進行修改:
# sudo egrep -v "^[[:space:]]{0,}#" /usr/local/nginx/conf/nginx.conf > ./nginx_janus.conf
# 不知為何,權限不允許,創建user用戶的時候應該加入root組,而不應該是user組。以上也沒解決添加server配置的問題。
sudo vim /usr/local/nginx/conf/nginx.conf
要添加的內容如下:
server { listen 443 ssl; server_name localhost; ssl_certificate /home/alex/cert/cert.pem; ssl_certificate_key /home/alex/cert/key.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /opt/janus/share/janus/demos; index index.html index.htm; } }
配置好的完整的配置文件如下:
worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } server { listen 443 ssl; server_name localhost; ssl_certificate /home/alex/cert/cert.pem; ssl_certificate_key /home/alex/cert/key.pem; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root /opt/janus/share/janus/demos; index index.html index.htm; } } }
啟動nginx:
# 把配置文件的注釋過濾掉,添加以上配置,然后拷到配置文件存放路徑下,指定配置文件並啟動nginx
sudo cp -f nginx_janus.conf /usr/local/nginx/conf/
sudo /usr/local/nginx/sbin/nginx -c conf/nginx_janus.conf # 注意這里,指定配置文件要帶conf文件夾
# 此時就已經可以通過外網https://161.117.189.27進行訪問了。注意是https
sudo /usr/local/nginx/sbin/nginx -s stop/reopen/reload
4. Janus的配置
首先需要安裝coturn,裝過的就不裝了,否則看之前這篇文章:WebRTC實戰一。
反正也是安裝到系統路徑下,在哪都一樣。讓它先在后台跑起來:
sudo nohup turnserver -L 0.0.0.0 --min-port 30000 --max-port 60000 -a -u alex:123456 -v -f -r nort.gov &
ps aux | grep turnserver
sudo lsof -i:3478 && echo "turnserver startup" || echo "turnserver not startup"
把所有.sample后綴的配置文件拷貝並去掉.sample后綴:
cd /opt/janus/etc/janus for i in *.sample; do sudo cp $i ${i//.sample/}; done;
修改配置文件
export SERVER_IP="161.117.189.27" export USER_NAME=alex export PASSWORD="123456" # janus.jcfg CFG_FILE=janus.jcfg sudo sed -i "s#^.*stun_server.*#stun_server = \"$SERVER_IP\"#g" $CFG_FILE # 替換IP sudo sed -i "s#.*stun_port.*# stun_port = 3478#g" $CFG_FILE # 去掉PORT注釋 sudo sed -i "s#^.*turn_server.*# turn_server = \"$SERVER_IP\"#g" $CFG_FILE sudo sed -i "s#.*turn_port.*# turn_port = 3478#g" $CFG_FILE sudo sed -i "s#.*turn_type.*# turn_type = \"udp\"#g" $CFG_FILE sudo sed -i "s#.*turn_user.*# turn_user = \"$USER_NAME\"#g" $CFG_FILE sudo sed -i "s#.*turn_pwd.*# turn_pwd = \"$PASSWORD\"#g" $CFG_FILE
janus.transport.http.jcfg 暫時用不上,先配置一下
CFG_FILE=janus.transport.http.jcfg
sudo sed -i "s#https = false#https = true#g" $CFG_FILE sudo sed -i "s#.*secure_port = 8089.*# secure_port = 8089#g" $CFG_FILE # 去掉注釋 # 還要配置證書的路徑
sudo sed -i "s#.*cert_pem = .*# cert_pem = \"$CERT_PATH/cert.pem\"#g" $CFG_FILE # 去掉注釋 sudo sed -i "s#.*cert_key = .*# cert_key = \"$CERT_PATH/key.pem\"#g" $CFG_FILE # 去掉注釋
最主要使用websocket,一定要配置 janus.transport.websockets.jcfg
CFG_FILE=janus.transport.websockets.jcfg sudo sed -i "s#.*\bwss = false.*# wss = true#g" $CFG_FILE sudo sed -i "s#.*wss_port = 8989.*# wss_port = 8989#g" $CFG_FILE # 也要配置證書 sudo sed -i "s#.*cert_pem = .*# cert_pem = \"$CERT_PATH/cert.pem\"#g" $CFG_FILE sudo sed -i "s#.*cert_key = .*# cert_key = \"$CERT_PATH/key.pem\"#g" $CFG_FILE
修改janus的websocket配置,在文件的大概50行處添加:
CFG_FILE=/opt/janus/share/janus/demos/videoroomtest.js sudo sed -i "s#.*server = .*8089# server = \"wss://\" + window.location.hostname + \":8989#g" $CFG_FILE
server = "wss://" + window.location.hostname + ":8989";

不使用websocket:把 janus.transport.http.jcfg、janus.transport.websockets.jcfg(不使用證書無法連接websocket)、videoroomtest.js 都恢復原樣。
5. 運行janus
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
/opt/janus/bin/janus --debug-level=5 --log-file=$HOME/janus-log
動態庫找不到的問題:參考,該問題直接導致janus終止執行,export LD_LIBRARY_PATH 后問題臨時解決。在解決了下面的這個問題后該問題徹底被解決。
另外,動態庫找不到時也同時出現janus加載插件沒有權限的問題,是創建用戶的時候指定的用戶權限導致的,新建用戶的時候注意設置權限/屬組或建完用戶后用usermod命令提升權限即可,該問題沒有使程序終止執行,比較隱蔽難以發現。
最終,還是在root下啟動janus比較靠譜一些。貌似安裝后重啟機器就好了。
6. 擴展
webrtc在safari上的問題:參考
