推流拉流WebRtc+Janus+coturn+Nginx方案

1.创建测试SSL,本地http可以拉起摄像头,服务器需要配置https拉起摄像头
在nginx中,可以用ssl模块配置同时支持http和https并存
创建服务器私钥,命令会让你输入一个口令
openssl genrsa -des3 -out server.key 4096
创建签名请求的证书(CSR),设置信息
openssl req -new -key server.key -out server.csr
最后标记证书使用上述私钥和CSR
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
openssl rsa -in server.key -out key.pem
openssl x509 -in server.crt -out cert.pem
2.安装coturn服务器
下载地址:https://github.com/coturn/coturn
安装依赖
sudo apt-get install libssl-dev 
sudo apt-get install libevent-dev 
sudo apt-get install libpq-dev 
sudo apt-get install mysql-client 
sudo apt-get install libmysqlclient-dev 
sudo apt-get install libhiredis-dev 
sudo apt-get install gcc 
sudo apt-get install pkg-config
编译安装
sourcsource ./configure
make -j 8
sudo make install
e ./configure make -j 8 sudo make install
配置/usr/local/etc/turnserver.conf
复制/usr/local/etc/turnserver.conf.default到/usr/local/etc/turnserver.conf
elay-device=eth0
listening-ip=内网IP
listening-port=3478
tsl-listening-port=5349
relay-ip=内网IP
external-ip=外网IP

lt-cred-mech
user=user:123456
realm=domain.com
cli-password=123456
cert=/root/janus/ssl/cert.pem      //使用上面生成的pem
pkey=/root/janus/ssl/key.pem       //使用上面生成的pem

min-port=3480
max-port=3500
启动coturn
turnadmin -a -u user -p 123456 -r domain.com
sudo turnserver -c /usr/local/etc/turnserver.conf -a -f -v -r domain.com

 

测试端口是否正常
sudo lsof -n -i4TCP:3478 | grep LISTEN 
sudo lsof -n -i4TCP:5349 | grep LISTEN
页面测试是否穿透成功
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/

relay回来是自己的地址表示成功

3.安装janus服务器
安装依赖
sudo aptitude install libmicrohttpd-dev
sudo aptitude install libjansson-dev
sudo aptitude install libssl-dev
sudo aptitude install libsrtp-dev
sudo aptitude install libsofia-sip-ua-dev
sudo aptitude install libglib2.0-dev
sudo aptitude install libopus-dev
sudo aptitude install libogg-dev
sudo aptitude install libcurl4-openssl-dev
sudo aptitude install liblua5.3-dev
sudo aptitude install libconfig-dev
sudo aptitude install pkg-config
sudo aptitude install gengetopt
sudo aptitude install libtool
sudo aptitude install automake
如果有某一个安装失败,又是官网要求必须装的,则需要人肉解决一下
安装libnice
https://launchpad.net/ubuntu/+source/libnice/0.1.16-1
libnice_0.1.16.orig.tar.gz
./configure && make && sudo make install
安装libwebsocket
git clone https://libwebsockets.org/repo/libwebsockets
cd libwebsockets
# If you want the stable version of libwebsockets, uncomment the next line
# git checkout v3.2-stable
mkdir build
cd build
# See https://github.com/meetecho/janus-gateway/issues/732 re: LWS_MAX_SMP
cmake -DLWS_MAX_SMP=1 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make && sudo make install
安装libsrtp
wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz
tar xfv v2.2.0.tar.gz
cd libsrtp-2.2.0
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
安装usrsctp
git clone https://github.com/sctplab/usrsctp
cd usrsctp
./bootstrap
./configure --prefix=/usr --disable-programs --disable-inet --disable-inet6
make && sudo make install
编译Janus
git clone https://github.com/meetecho/janus-gateway.git
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets
make
sudo make install
配置
目录在:/opt/janus/etc/janus/
将*.jcfg.sample文件复制成*.jcfg
Janus默认的配置,是没有enable SSL的,意味着,https和wss不支持。而有些浏览器,要拉起摄像头,必须是加密的。所以,如果你Demo运行不起来,可以服务端配置一下SSL
打开/opt/janus/etc/janus/janus.jcfg,certificates修改key路径
certificates: {
        cert_pem = "/home/ssl/cert.pem"    //使用之前生成的
        cert_key = "/home/ssl/key.pem"      //使用之前生成的
        cert_pwd = "123456"
        #dtls_accept_selfsigned = false
        #dtls_ciphers = "your-desired-openssl-ciphers"
        #rsa_private_key = false
}
再打开/opt/janus/etc/janus/janus.transport.http.jcfg, 修改generals和certificates,启用https
general: {
        #events = true
        json = "indented"
        base_path = "/janus"
        http = true
        port = 8088
      
        https = true
        secure_port = 8089
}
certificates: {
        cert_pem = "/home/ssl/cert.pem"    //使用之前生成的
        cert_key = "/home/ssl/key.pem"      //使用之前生成的
        cert_pwd = "123456"
        #ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}
再打开/opt/janus/etc/janus/janus.transport.websockets.jcfg, 修改generals和certificates,启用wss。
general: {
        ws = true
        ws_port = 8188
        #ws_interface = "eth0"
        #ws_ip = "192.168.0.1"
        wss = true
        wss_port = 8989
}
certificates: {
        cert_pem = "/home/ssl/cert.pem"    //使用之前生成的
        cert_key = "/home/ssl/key.pem"      //使用之前生成的
        cert_pwd = "123456"
        #ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}
运行
/opt/janus/bin/janus --debug-level=7
查看打印信息
Janus 的视频会议插件运行成功
JANUS VideoRoom plugin initialized!
Janus的websocket启动成功
WebSockets thread started
Janus的http启动成功
HTTP webserver started (port 8088, /janus path listener)...
检查运行端口
lsof -i | grep janus
8089是https, 8188是ws, 8989是wss(websocket secure)
网页端的demo,在janus下载的源码就有了。在源码根目录的html目录下。
如果janus部署在本地,不需要ssl,http就可以,如果在云端,需要ssl通过https访问
打开https://IP:8442。是一个网页
如果要用websocket的ws或者wss,需要修改html/echotest.js或者html/videoroomtest.js文件,把server字段改一下,例如:
var server = "ws://" + window.location.hostname + ":8188";
coturn服务器配置
stun_server = "stun.domain.net"/"stun3.l.google.com"(免费)
stun_port = 3478
nice_debug = false
###要配置nat_1_1_mapping,且为当前服务器的公共ip地址.
nat_1_1_mapping = "publicIP"
#ice_ignore_list = "vmnet"
云服务器需要打开的端口
20000-40000:在spi plugin的配置文件里面,rtp 传输数据时候需要用到20000-40000[默认]这个区间的端口, 需要在阿里云以及防火墙上面都放开
/opt/janus/etc/janus/janus.plugin.sip.jcfg
firewall-cmd --add-port=20000-40000/udp --permanent
firewall-cmd --reload
coturn
3478:udp/tcp
443:tcp----8442
8088:tcp
8089:tcp
8090:tcp
40000-60000:udp
服务器防火墙相关
sudo ufw status
sudo ufw disable
systemctl  stop  firewalld
4.配置nginx服务器访问html
修改http server,配置SSL可以通过https访问,拉起摄像头
# HTTPS server
#
server {
    listen       8442 ssl;
    server_name  localhost;

    ssl_certificate      /root/janus/ssl/server.crt;
    ssl_certificate_key  /root/janus/ssl/server.key;

    location / {
        root   /root/janus/janus-gateway/html;
        index  videoroomtest.html;
    }
}
如果需要ice
server: server,iceServers: [{urls: "turn:domain.com.cn:3478改成你自己的域名或ip", username: "user改成你自己的账号", credential: "123456改成你自己的密码"}],


版权声明:本文为b711183612原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。