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 server
server {
listen 443 ssl;
server_name localhost;
# 配置相应的key
ssl_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 install
sudo 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.jcfg
cp janus.transport.http.jcfg.sample janus.transport.http.jcfg
cp janus.transport.websockets.jcfg.sample janus.transport.websockets.jcfg
cp janus.plugin.videoroom.jcfg.sample janus.plugin.videoroom.jcfg
cp janus.transport.pfunix.jcfg.sample janus.transport.pfunix.jcfg
cp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.jcfg
cp janus.plugin.recordplay.jcfg.sample janus.plugin.recordplay.jcfg
cp janus.plugin.voicemail.jcfg.sample janus.plugin.voicemail.jcfg
cp janus.plugin.sip.jcfg.sample janus.plugin.sip.jcfg
cp janus.plugin.nosip.jcfg.sample janus.plugin.nosip.jcfg
cp janus.plugin.textroom.jcfg.sample janus.plugin.textroom.jcfg
cp 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.com
stun_port = 3478
nice_debug = false
# 大概267行 填写云服务器外网ip地址
nat_1_1_mapping = janusserver.com
#打洞服务器配置大概274行
# credentials to authenticate…
turn_server = janusserver.com
turn_port = 3478
turn_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
评论前必须登录!
注册