WebRTC 服务器之Janus概述和环境搭建
1 概述
Janus 是由 Meetecho 开发的通用 WebRTC 服务器,它为构建 WebRTC 应用程序提供了一个模块化框架。服务器目标:Janus WebRTC 网关被设计为轻量级、通用的 WebRTC 服务器,除了实现以下方法外,它本身不提供任何功能:
- 设置与浏览器的 WebRTC 媒体通信
- 在客户端和服务器之间交换 JSON 消息
- 在浏览器和服务器端应用程序逻辑之间中继 RTP/RTCP 和消息
实际功能是在浏览器通过 Janus 核心连接的服务器端插件中实现的。这种模块化架构允许占用空间小,同时提供最大的灵活性。
1.1 主要特点
- 模块化架构:将核心 WebRTC 功能与应用程序特定逻辑分离
- 轻量级核心:用 C 语言编写,占用空间小
- 插件系统:可通过各种应用程序(视频会议、流媒体、SIP 网关等)的插件进行扩展
- 多种传输机制:支持 HTTP/REST、WebSockets、RabbitMQ、MQTT 和 Unix 套接字
- 会话管理:处理连接、WebRTC 会话和插件附件
- 媒体处理:处理媒体协商、编码和传输
- 录制功能:支持录制 WebRTC 会话
2 janus搭建
云服务器端口开放(本地虚拟机环境则关闭防火墙即可)需要在安全组开放端口:
TCP/UDP 3478
UDP 30000-60000
2.1基础环境
sudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev libsofia-sip-ua-dev libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt libtool automake libglib2.0-dev cmake libconfig-dev libssl-dev doxygen graphviz libavcodec-dev libavformat-dev libswscale-dev libavutil-dev
2.2 源码安装依赖
2.2.1 安装 WebSocket
git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
git branch -a 查看选择最新的稳定版本,
git checkout v4.3.0 切换到较新稳定版本
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make && sudo make install
2.2.2 安装 libsrtp
git clone https://gitee.com/MediaNext/libsrtp.git
cd libsrtp
git checkout v2.3.0
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
2.2.3 安装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
2.2.4安装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/# 配置,一定要支持https
./configure --with-http_ssl_module make
sudo make install
2.3 编译 Janus
git clone https://github.com/meetecho/janus-gateway.git
git tag 查看当前的 tag,选择最新稳定的版本v0.10.4
git checkout v0.10.4
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets --enable-post-processing
make
sudo make install
3 配置文件和运行janus
3.1 基础环境配置
3.1.1 基于https生成ssl证书
mkdir -p ~/cert
cd ~/cert
# CA私钥
openssl genrsa -out key.pem 2048
# 自签名证书
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
3.1.2设置全局域名IP对应关系
后面需要填写一大堆ip,为了方便修改ip我们在 Ubuntu 中将 IP 作为全局域名的常见设置。
vim /etc/hosts
#新增域名 格式你的云服务器ip+本地环境的域名。后续填写域名即可
#本地就用127.0.0.1
117.111.111.111 janusserver.com
3.1.3修改nginx配置文件
janus服务器程序文件夹在/opt/janus/
基于nginx配置文件重定向至 /opt/janus/share/janus/demos
# HTTPS serverserver {listen 443 ssl;server_name localhost;# 配置相应的keyssl_certificate /home/ubuntu/cert/cert.pem;ssl_certificate_key /home/ubuntu/cert/key.pem;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {# 指向janus demo所在目录root /opt/janus/share/janus/demos;index index.html index.htm;}}
启动nginx
sudo /usr/local/nginx/sbin/nginx
然后通过访问 https://127.0.0.1/ 。可以看到界面,但此时还不能正常通话。
3.1.4 安装和启动coturn
打洞服务器,本地测试可忽略。
sudo apt-get install libssl-dev
sudo apt-get install libevent-dev#git clone https://github.com/coturn/coturn
#cd coturn
# 提供另一种安装方式turnserver是coturn的升级版本
wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
tar xfz turnserver-4.5.0.7.tar.gz
cd turnserver-4.5.0.7./configure
make && sudo make installsudo nohup turnserver -L 0.0.0.0 --min-port 50000 --max-port 60000 -a -u 用户名:密码-v -f -r nort.gov &
3.2 janus 配置文件之Video room功能
janus配置
janus安装目录在/opt/janus。文件结构:
./bin | ./etc | ./include | ./lib | ./share |
可执行文件 | janus配置文件 | janus头文件 | janus库 | 存放脚本或者文档,web demo也在这里 |
需要配置的文件为(目录/opt/janus/etc/janus)先备份。先把.sample后缀的文件拷贝成jcfg后缀
# 进到对应的目录
cd /opt/janus/etc/janus
# 拷贝文件cp janus.jcfg.sample janus.jcfgcp janus.transport.http.jcfg.sample janus.transport.http.jcfgcp janus.transport.websockets.jcfg.sample janus.transport.websockets.jcfgcp janus.plugin.videoroom.jcfg.sample janus.plugin.videoroom.jcfgcp janus.transport.pfunix.jcfg.sample janus.transport.pfunix.jcfgcp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.jcfgcp janus.plugin.recordplay.jcfg.sample janus.plugin.recordplay.jcfgcp janus.plugin.voicemail.jcfg.sample janus.plugin.voicemail.jcfgcp janus.plugin.sip.jcfg.sample janus.plugin.sip.jcfgcp janus.plugin.nosip.jcfg.sample janus.plugin.nosip.jcfgcp janus.plugin.textroom.jcfg.sample janus.plugin.textroom.jcfgcp janus.plugin.echotest.jcfg.sample janus.plugin.echotest.jcfg
3.2.1 配置janus.jcfg
#大约202行左右,设置udp端口范围。
rtp_port_range = "50000-60000"
# 237行
stun_server = janusserver.comstun_port = 3478nice_debug = false
# 大概267行 填写云服务器外网ip地址
nat_1_1_mapping = janusserver.com#打洞服务器配置大概274行
# credentials to authenticate...turn_server = janusserver.comturn_port = 3478turn_type = "udp"turn_user = 用户名turn_pwd = 密码
rtp_port_range = "50000-60000"
3.2.2 配置janus.transport.http.jcfg
general: {json = "indented" base_path = "/janus" threads = "unlimited" http = true port = 8088 https = true secure_port = 8089
}certificates: {cert_pem = "/root/cert/cert.pem"cert_key = "/root/cert/key.pem"#cert_pwd = "secretpassphrase"#ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}
3.2.3 配置janus.transport.websockets.jcfg
general: {json = "indented" ws = true ws_port = 8188 wss = true wss_port = 8989
}
certificates: {cert_pem = "/root/cert/cert.pem"cert_key = "/root/cert/key.pem"#cert_pwd = "secretpassphrase"#ciphers = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
}
3.3 修改.js文件,指定wss协议
/opt/janus/share/janus/demos/videoroomtest.js
var server = "wss://" + window.location.hostname + ":8989";
3.4 配置coturn地址
本地测试无需打洞,部署云服务且使用打洞才需要这一步。
/opt/janus/share/janus/demos/videoroomtest.js
这里要写你的服务器ip,使用本地域名方式解析不出来
#83行添加server: server,iceServers :[{urls: ["turn:127.0.0.1(这里要写你的服务器ip,使用域名解析不出来):3478?transport=udp","turn:127.0.0.1(同理):3478?transport=tcp" ],username: "jbj",credential: "123456"},{urls: ["stun:127.0.0.1:3478"]}],success: function()
3.5 运行
涉及服务启动有点多,在这里进行总结。
#nginx启动
sudo /usr/local/nginx/sbin/nginx
#启动coturn
sudo nohup turnserver -L 0.0.0.0 --min-port 50000 --max-port 60000 -a -u 用户名:123456 -v -f -r nort.gov &
#jauns运行
/opt/janus/bin/janus --debug-level=5 --log-file=$HOME/janus-log
访问
https://IP/
或者
https://IP/videoroomtest.html
4.效果
学习资料分享
0voice · GitHub