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