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上的问题:参考