WebRTC實戰三-Janus


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;
        }
}
View Code

  配置好的完整的配置文件如下:

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.conf

  啟動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上的問題:參考

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM