Janus是一个开源的 WebRTC SFU 服务器,可以作为 WebRTC 的一个端将其收到的数据进行转发,同时提供了一些的控制能力。Janus 是基于插件架构的,其功能都是通过一个个插件来提供,我们可以为 Janus 开发插件,来扩展其功能。
一、编译部署
Janus 可以方便的在 Linux 和 MacOS 上面编译部署,暂时不支持 Windows 系统,但可以在 Win10 的Windows Subsystem for Linux
上编译部署。
1.1 安装依赖项
在编译 Janus 之前,需要安装如下依赖项:
- Jansson
- libconfig
- libnice (at least v0.1.15 suggested, master recommended)
- OpenSSL (at least v1.0.1e)
- libsrtp (at least v1.5 suggested)
- usrsctp (only needed if you are interested in Data Channels)
- libmicrohttpd (only needed if you are interested in REST support for the Janus API)
- libwebsockets (only needed if you are interested in WebSockets support for the Janus API)
- cmake (only needed if you are interested in WebSockets and/or BoringSSL support, as they make use of it)
- rabbitmq-c (only needed if you are interested in RabbitMQ support for the Janus API or events)
- paho.mqtt.c (only needed if you are interested in MQTT support for the Janus API or events)
- nanomsg (only needed if you are interested in Nanomsg support for the Janus API)
- libcurl (only needed if you are interested in the TURN REST API support)
Janus 的某些插件可能还依赖下面的库:
- Sofia-SIP (only needed for the SIP plugin)
- libopus (only needed for the bridge plugin)
- libogg (needed for the voicemail plugin and/or post-processor)
- libcurl (only needed if you are interested in RTSP support in the Streaming plugin or in the sample Event Handler plugin)
- Lua (only needed for the Lua plugin)
另外,还需要安装如下工具:
上面的所有库通常在多数 Linux 发行版中都有提供,可以直接安装。以在Fedora
中安装为例:
1 | yum install libmicrohttpd-devel jansson-devel \ |
需要注意的是,如果你尝试在CentOS
上面安装这些依赖项,需要先执行yum install epel-release
.
在Ubuntu
和Debian
系统上,执行如下命令:
1 | aptitude install libmicrohttpd-dev libjansson-dev \ |
在低版本的系统上(如低于
Ubuntu 14.04 LTS
版本),可能没有提供的libopus
的预编译包,如果遇到这种情况,需要手动编译opus.
1.1.1 libnice
libnice
虽然在大多数系统上都提供了预编译包,但可能会导致一些问题,所以建议先卸载老版本,然后下载 libnice 的master
的版本,手动编译:
1 | git clone https://gitlab.freedesktop.org/libnice/libnice |
确保已经移除老版本,否则会产生冲突。如果需要保留多个版本的 libnice,可以执行
pkg-config --cflags --libs nice
确保 Janus 可以找到正确的版本,如果无法找到,可以在编译 Janus 之前设置PKG_CONFIG_PATH
环境变量,如export PKG_CONFIG_PATH=/path/to/libnice/lib/pkgconfig
1.1.2 libcurl
如果后期需要编译安装 Janus 的Event Handler
插件,还需要安装 libcurl 库的开发版本,在 Fedora/CentOS 上通常为libcurl-devel
,在 Ubuntu/Debian 上通常为libcurl4-openssl-dev
。
1.1.3 libsrtp
假如已经安装了libsrtp
1.5 之前的版本,需要先卸载,然后手动安装1.5x 或 1.6x版本。因为 1.4x 版本会导致 WebRTC 出现一些问题。
以安装2.2.0
版本为例:
1 | wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz |
Janus 的 configure 脚本可以自动检测到使用的 libsrtp 的版本,如果同时安装了 1.5x 和 2.x 版本,会优先使用 2.x 版本,如果想强制使用 1.5 或者 1.6 版本,可以在 configure 命令传入--disable-libsrtp2
参数。
假如安装的是 x86/x64 版本的 libsrtp,需要在 configure 命令传入
--libdir=/usr/lib64
参数。
1.1.4 BoringSSL
如果需要使用BoringSSL
代替OpenSSL
(因为使用BoringSSL
可以使用--enable-dtls-settimeout
功能),可以通过如下命令手动安装,并且在 configure 命令传入--enable-boringssl
参数:
1 | git clone https://boringssl.googlesource.com/boringssl |
Janus 默认 BoringSSL 安装在/opt/boringssl
,如果不是,可以通过--enable-boringssl=/path/to/boringssl
指定。
1.1.5 usrcstp
1 | git clone https://github.com/sctplab/c |
- Note: 假如安装的是 x8/x64 版本的 usrcstp,需要在 configure 命令传入
--libdir=/usr/lib64
参数。
1.1.6
如果需要提供 websockets 信令支持,还需要安装 libwebsockets 库:
1 | git clone https://libwebsockets.org/repo/libwebsockets |
- 假如 libwebsockets.org 无法访问, 可以将第一行替换为:
git clone https://github.com/warmcat/libwebsockets.git
1.1.7 文档
如果需要编译 Janus 文档,需要安装如下工具:
Fedora:
1 | yum install doxygen graphviz |
Ubuntu/Debian:
1 | aptitude install doxygen graphviz |
二、编译
在安装完依赖项之后,使用下面命令获取 Janus 代码:
1 |
|
然后使用sh autogen.sh
命令生成 configure 文件。
最后,执行 configure 和编译命令开始编译:
1 | ./configure --prefix=/opt/janus --enable-boringssl |
编译完成之后,使用make configs
命令生成默认配置文件,配置文件位于/opt/janus/etc/janus/janus.jcfg
。需要注意的是,每次执行make configs
命令都会将/opt/janus/etc/janus/janus.jcfg
文件还原为默认配置。
三、运行、测试
我们可以先不修改任何配置,将 Janus 运行起来,然后使用测试 html,测试一下效果。
执行如下命令,运行 Janus:
1 | /opt/janus/bin/janus |
Janus 启动完成之后,我们另寻一台客户机,将 Janus 源码下载下来,修改janus-gateway\html\echotest.js
文件中server
变量为:"ws://47.93.47.150:8188"
,如:
1 | var server = null; |
在浏览器中打开echotest.html
,点击“Start”即可看到效果。
如果无法连接成功,可能是因为iceServers
默认使用的是 google 的 turn 服务器,国内无法访问导致,可以参考 如何搭建WebRTC的TURN服务器 搭建自己的 TURN 服务器。