@a-martynovich/janus-gateway 中文文档教程
Janus WebRTC Server
Janus 是一个开源的通用 WebRTC 服务器,由 Meetecho 设计和开发。 这个版本的服务器是为 Linux 系统量身定制的,尽管它也可以为 MacOS 机器编译和安装。 不支持 Windows,但如果这是一个要求,Janus 可以在 Windows 10 上的“Linux 的 Windows 子系统”中工作。
对于一些在线演示和文档,请确保支付 项目网站访问!
要与我们和其他用户讨论 Janus,有一个名为 meetecho-janus 的 Google 群组,您可以使用。 不过,如果您遇到错误,请改为在 github 上提交问题。
Dependencies
要安装它,您需要满足以下依赖项:
- Jansson
- libnice (at least v0.1.13 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)
几个插件依赖于更多的库:
- 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)
此外,您还需要以下库和工具:
所有这些库通常在大多数最常见的应用程序上都可用分布。 例如,在最新的 Fedora 上安装这些库非常简单:
yum install libmicrohttpd-devel jansson-devel \
openssl-devel libsrtp-devel sofia-sip-devel glib-devel \
opus-devel libogg-devel libcurl-devel lua-devel \
pkgconfig gengetopt libtool autoconf automake
请注意,如果您尝试在 CentOS 机器上安装,您可能还必须 yum install epel-release
。
在 Ubuntu 或 Debian 上,它需要这样的东西:
aptitude install libmicrohttpd-dev libjansson-dev \
libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev \
libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
pkg-config gengetopt libtool automake
- Note: please notice that libopus may not be available out of the box on Ubuntu or Debian, unless you're using a recent version (e.g., Ubuntu 14.04 LTS). In that case, you'll have to install it manually.
虽然 libnice
通常作为软件包在大多数发行版中可用,但众所周知,Ubuntu 中开箱即用的版本会导致问题。 因此,我们始终建议手动编译和安装 libnice 的主版本(甚至是实验性补丁< /a> 优化其性能)。 libnice master 的安装非常简单:
git clone https://gitlab.freedesktop.org/libnice/libnice
cd libnice
./autogen.sh
./configure --prefix=/usr
make && sudo make install
- Note: Make sure you remove the distro version first, or you'll cause conflicts between the installations. In case you want to keep both for some reason, for custom installations of libnice you can also run
pkg-config --cflags --libs nice
to make sure Janus can find the right installation. If that fails, you may need to set thePKG_CONFIG_PATH
environment variable prior to compiling Janus, e.g.,export PKG_CONFIG_PATH=/path/to/libnice/lib/pkgconfig
如果您有兴趣编译示例事件处理程序插件,您还需要安装 libcurl 的开发版本(通常是 libcurl-devel
on Fedora/ CentOS,libcurl4-openssl-dev
在 Ubuntu/Debian 上)。
如果您的发行版提供 1.5 之前版本的 libsrtp,您必须卸载该版本并安装 1.5.x、1.6.x 或2.x 手动。 事实上,已知 1.4.x 会导致 WebRTC 出现多个问题。 1.5.4 版的安装非常简单:
wget https://github.com/cisco/libsrtp/archive/v1.5.4.tar.gz
tar xfv v1.5.4.tar.gz
cd libsrtp-1.5.4
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
2.x 版的说明几乎相同。 请注意,以下步骤适用于 2.0.0 版,但可能有更新的版本可用:
wget https://github.com/cisco/libsrtp/archive/v2.0.0.tar.gz
tar xfv v2.0.0.tar.gz
cd libsrtp-2.0.0
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
Janus 配置脚本会自动检测您安装了哪一个,并自动链接到正确的库,如果两者都安装了,则选择 2.x。 如果您想选择 1.5 或 1.6,请在配置 Janus 时传递 --disable-libsrtp2
以强制它使用旧版本。
- Note: when installing libsrtp, no matter which version, you may need to pass
--libdir=/usr/lib64
to the configure script if you're installing on a x86_64 distribution.
如果您想使用 BoringSSL 而不是 OpenSSL(例如,因为您想利用 --enable-dtls-settimeout
),您必须手动将其安装到特定位置。 使用以下步骤:
git clone https://boringssl.googlesource.com/boringssl
cd boringssl
# Don't barf on errors
sed -i s/" -Werror"//g CMakeLists.txt
# Build
mkdir -p build
cd build
cmake -DCMAKE_CXX_FLAGS="-lrt" ..
make
cd ..
# Install
sudo mkdir -p /opt/boringssl
sudo cp -R include /opt/boringssl/
sudo mkdir -p /opt/boringssl/lib
sudo cp build/ssl/libssl.a /opt/boringssl/lib/
sudo cp build/crypto/libcrypto.a /opt/boringssl/lib/
安装库后,您必须将额外的 --enable-boringssl
标志传递给配置脚本,因为默认情况下 Janus 将在假设将使用 OpenSSL 的情况下构建。 默认情况下,Janus 希望 BoringSSL 安装在 /opt/boringssl
—— 如果它安装在另一个位置,将路径传递给配置脚本:--enable-boringssl=/ path/to/boringssl
如果您使用的是 OpenSSL 并想切换到 BoringSSL,请确保在使用新的 BoringSSL 支持进行编译之前在 Janus 文件夹中执行 make clean
。 如果您启用了 BoringSSL 支持并且还希望 Janus 检测 DTLS 超时并以更快的重传做出反应,那么也将 --enable-dtls-settimeout
传递给配置脚本。
对于数据通道支持所需的 usrsctp,它通常在存储库中不可用,因此如果您对它们感兴趣(支持是可选的),则必须手动安装它。 这是一个非常简单和标准
git clone https://github.com/sctplab/usrsctp
cd usrsctp
./bootstrap
./configure --prefix=/usr && make && sudo make install
- Note: you may need to pass
--libdir=/usr/lib64
to the configure script if you're installing on a x86_64 distribution.
的过程:同样适用于 libwebsockets,这是可选的 WebSockets 支持所必需的。 如果您有兴趣支持 WebSockets 来控制 Janus,作为默认纯 HTTP REST API 的替代(或替代),您必须手动安装它:
git clone https://libwebsockets.org/repo/libwebsockets
cd libwebsockets
# If you want the stable version of libwebsockets, uncomment the next line
# git checkout v2.4-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
注意:如果 libwebsockets.org 是由于任何原因无法访问,请将第一行替换为:
git clone https://github.com/warmcat/libwebsockets.git
这同样适用于 Eclipse Paho MQTT C 客户端库,这是可选 MQTT 支持所必需的。 如果您有兴趣集成 MQTT 通道作为 HTTP 和/或 WebSockets 的替代(或替代)来控制 Janus,或者作为 Janus Events 的载体,您可以通过以下步骤安装最新版本:
git clone https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c
make && sudo make install
- Note: you may want to set up a different install path for the library, to achieve that, replace the last command by 'sudo prefix=/usr make install'.
如果您对 Nanomsg 支持感兴趣,您需要安装相关的 C 库。 它通常作为易于安装的软件包在几乎所有存储库中提供。 以下是关于如何在 Ubuntu 上安装它的示例:
aptitude install libnanomsg-dev
最后,对于 rabbitmq-c 也可以这样说,这是可选的 RabbitMQ 支持所必需的。 事实上,可以找到该库的几个不同版本,并且大多数分发存储库中通常可用的版本相对于当前的开发状态并不是最新的。 因此,如果您有兴趣集成 RabbitMQ 队列作为 HTTP 和/或 WebSockets 的替代(或替代)来控制 Janus,您可以通过以下步骤安装最新版本:
git clone https://github.com/alanxz/rabbitmq-c
cd rabbitmq-c
git submodule init
git submodule update
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make && sudo make install
- Note: you may need to pass
--libdir=/usr/lib64
to the configure script if you're installing on a x86_64 distribution.
总而言之,如果您有兴趣构建还有 Janus 文档,您还需要一些额外的工具:
在 Fedora 上:
yum install doxygen graphviz
在 Ubuntu/Debian 上:
aptitude install doxygen graphviz
Compile
安装所有依赖项后,获取代码:
git clone https://github.com/meetecho/janus-gateway.git
cd janus-gateway
然后只需使用:
sh autogen.sh
生成配置文件。 之后,像往常一样配置和编译以开始整个编译过程:
./configure --prefix=/opt/janus
make
make install
由于 Janus 需要核心及其模块的配置文件才能工作,您可能还想安装要使用的默认配置文件,您可以这样做:
make configs
请记住只执行一次,否则后续的 make configs
将覆盖您在此期间修改的任何配置文件。
如果您已经安装了上述库但不感兴趣,例如,数据通道、WebSockets、MQTT 和/或 RabbitMQ,您可以在配置时禁用它们:
./configure --disable-websockets --disable-data-channels --disable-rabbitmq --disable-mqtt
几乎所有外部模块和许多功能都有配置标志,因此您可能需要发出 ./configure --help
来深入了解可用选项。 在您进行配置后,将始终显示将要构建的内容的摘要,使您可以仔细检查是否需要和不需要的内容。
如果 Doxygen 和 graphviz 可用,该过程还可以为您构建文档。 默认情况下,编译过程不会尝试构建文档,因此如果您更喜欢构建它,请使用 --enable-docs
配置选项:
./configure --enable-docs
您还可以选择性地启用/禁用其他功能(例如,您不关心的特定插件,或者您是否要构建录音后处理器)。 配置时使用 --help 选项以获取更多信息。
Building on MacOS
虽然上述大部分说明在 MacOS 上编译 Janus 时也适用,但在执行此操作时有几个方面需要强调。
首先,您可以使用 brew
安装大部分依赖项:
brew install jansson libnice openssl srtp libusrsctp libmicrohttpd \
libwebsockets cmake rabbitmq-c sofia-sip opus libogg curl \
glib pkg-config gengetopt autoconf automake libtool
关于 libwebsockets,请确保安装的版本高于 2.4.1
,或者您可能会遇到这篇文章中描述的问题。 如果 brew
没有提供更新的版本,您必须手动安装该库。
请注意,在配置 Janus 时,您可能还需要提供自定义 prefix
和 PKG_CONFIG_PATH
,例如:
./configure --prefix=/usr/local/janus PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig
其他一切都与 Linux 上的工作方式完全相同。
Configure and start
要启动服务器,您可以使用 janus
可执行文件。 您可以在配置文件中
<installdir>/etc/janus/janus.cfg
或在命令行中配置几项内容:
<installdir>/bin/janus --help
janus 0.5.0
Usage: janus [OPTIONS]...
-h, --help Print help and exit
-V, --version Print version and exit
-b, --daemon Launch Janus in background as a daemon
(default=off)
-p, --pid-file=path Open the specified PID file when starting Janus
(default=none)
-N, --disable-stdout Disable stdout based logging (default=off)
-L, --log-file=path Log to the specified file (default=stdout only)
-i, --interface=ipaddress Interface to use (will be the public IP)
-P, --plugins-folder=path Plugins folder (default=./plugins)
-C, --config=filename Configuration file to use
-F, --configs-folder=path Configuration files folder (default=./conf)
-c, --cert-pem=filename DTLS certificate
-k, --cert-key=filename DTLS certificate key
-K, --cert-pwd=text DTLS certificate key passphrase (if needed)
-S, --stun-server=filename STUN server(:port) to use, if needed (e.g.,
Janus behind NAT, default=none)
-1, --nat-1-1=ip Public IP to put in all host candidates,
assuming a 1:1 NAT is in place (e.g., Amazon
EC2 instances, default=none)
-E, --ice-enforce-list=list Comma-separated list of the only interfaces to
use for ICE gathering; partial strings are
supported (e.g., eth0 or eno1,wlan0,
default=none)
-X, --ice-ignore-list=list Comma-separated list of interfaces or IP
addresses to ignore for ICE gathering;
partial strings are supported (e.g.,
vmnet8,192.168.0.1,10.0.0.1 or
vmnet,192.168., default=vmnet)
-6, --ipv6-candidates Whether to enable IPv6 candidates or not
(experimental) (default=off)
-l, --libnice-debug Whether to enable libnice debugging or not
(default=off)
-f, --full-trickle Do full-trickle instead of half-trickle
(default=off)
-I, --ice-lite Whether to enable the ICE Lite mode or not
(default=off)
-T, --ice-tcp Whether to enable ICE-TCP or not (warning: only
works with ICE Lite)
(default=off)
-R, --rfc-4588 Whether to enable RFC4588 retransmissions
support or not (default=off)
-q, --max-nack-queue=number Maximum size of the NACK queue (in ms) per user
for retransmissions
-t, --no-media-timer=number Time (in s) that should pass with no media
(audio or video) being received before Janus
notifies you about this
-r, --rtp-port-range=min-max Port range to use for RTP/RTCP (only available
if the installed libnice supports it)
-n, --server-name=name Public name of this Janus instance
(default=MyJanusInstance)
-s, --session-timeout=number Session timeout value, in seconds (default=60)
-m, --reclaim-session-timeout=number
Reclaim session timeout value, in seconds
(default=0)
-d, --debug-level=1-7 Debug/logging level (0=disable debugging,
7=maximum debug level; default=4)
-D, --debug-timestamps Enable debug/logging timestamps (default=off)
-o, --disable-colors Disable color in the logging (default=off)
-M, --debug-locks Enable debugging of locks/mutexes (very
verbose!) (default=off)
-a, --apisecret=randomstring API secret all requests need to pass in order
to be accepted by Janus (useful when wrapping
Janus API requests in a server, none by
default)
-A, --token-auth Enable token-based authentication for all
requests (default=off)
-e, --event-handlers Enable event handlers (default=off)
通过命令行传递的选项优先于配置文件中指定的选项。 要启动服务器,只需运行:
<installdir>/bin/janus
这将启动服务器,并让它查看配置文件。
确保您查看了所有配置文件,以便根据您的特定需求定制 Janus:每个配置文件都有记录,因此根据您的要求进行更改应该不难。 回购带有一些默认值(假设您在安装服务器后发出 make configs
),这些默认值对于一般部署来说很有意义,并且还包括所有插件的一些示例配置(例如,用于侦听的 Web 服务器上,要创建的会议室,要在启动时可用的流挂载点等)。
要测试它是否正常工作,您可以使用 html
文件夹中随此软件包提供的演示:这些演示与 项目网站。 只需复制它包含在网络服务器中的文件,或使用用户空间网络服务器来提供 html
文件夹中的文件(例如,使用 php 或 python),然后打开 index.html Chrome 或 Firefox 中的页面。 将提供利用不同插件的演示页面列表。 如果您更改了任何与传输相关的默认配置,请记住编辑演示 JavaScript 文件中的传输/端口详细信息。 此外,演示引用了预配置的插件资源,因此如果您添加一些新资源(例如,新的视频会议),您可能需要调整演示页面才能实际使用它们。
Documentation
Janus 有完整的文档记录。 您可以在 项目网站 上找到使用 Doxygen 自动生成的当前文档。
Help us!
欢迎任何想法、反馈或(希望不是!)侮辱!
由 @meetcho 开发
Janus WebRTC Server
Janus is an open source, general purpose, WebRTC server designed and developed by Meetecho. This version of the server is tailored for Linux systems, although it can be compiled for, and installed on, MacOS machines as well. Windows is not supported, but if that's a requirement, Janus is known to work in the "Windows Subsystem for Linux" on Windows 10.
For some online demos and documentations, make sure you pay the project website a visit!
To discuss Janus with us and other users, there's a Google Group called meetecho-janus that you can use. If you encounter bugs, though, please submit an issue on github instead.
Dependencies
To install it, you'll need to satisfy the following dependencies:
- Jansson
- libnice (at least v0.1.13 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)
A couple of plugins depend on a few more libraries:
- 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)
Additionally, you'll need the following libraries and tools:
All of those libraries are usually available on most of the most common distributions. Installing these libraries on a recent Fedora, for instance, is very simple:
yum install libmicrohttpd-devel jansson-devel \
openssl-devel libsrtp-devel sofia-sip-devel glib-devel \
opus-devel libogg-devel libcurl-devel lua-devel \
pkgconfig gengetopt libtool autoconf automake
Notice that you may have to yum install epel-release
as well if you're attempting an installation on a CentOS machine instead.
On Ubuntu or Debian, it would require something like this:
aptitude install libmicrohttpd-dev libjansson-dev \
libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev \
libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
pkg-config gengetopt libtool automake
- Note: please notice that libopus may not be available out of the box on Ubuntu or Debian, unless you're using a recent version (e.g., Ubuntu 14.04 LTS). In that case, you'll have to install it manually.
While libnice
is typically available in most distros as a package, the version available out of the box in Ubuntu is known to cause problems. As such, we always recommend manually compiling and installing the master version of libnice (or even the experimental patch that optimize its performances). Installation of libnice master is quite straightforward:
git clone https://gitlab.freedesktop.org/libnice/libnice
cd libnice
./autogen.sh
./configure --prefix=/usr
make && sudo make install
- Note: Make sure you remove the distro version first, or you'll cause conflicts between the installations. In case you want to keep both for some reason, for custom installations of libnice you can also run
pkg-config --cflags --libs nice
to make sure Janus can find the right installation. If that fails, you may need to set thePKG_CONFIG_PATH
environment variable prior to compiling Janus, e.g.,export PKG_CONFIG_PATH=/path/to/libnice/lib/pkgconfig
In case you're interested in compiling the sample Event Handler plugin, you'll need to install the development version of libcurl as well (usually libcurl-devel
on Fedora/CentOS, libcurl4-openssl-dev
on Ubuntu/Debian).
If your distro ships a pre-1.5 version of libsrtp, you'll have to uninstall that version and install 1.5.x, 1.6.x or 2.x manually. In fact, 1.4.x is known to cause several issues with WebRTC. Installation of version 1.5.4 is quite straightforward:
wget https://github.com/cisco/libsrtp/archive/v1.5.4.tar.gz
tar xfv v1.5.4.tar.gz
cd libsrtp-1.5.4
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
The instructions for version 2.x are practically the same. Notice that the following steps are for version 2.0.0, but there may be more recent versions available:
wget https://github.com/cisco/libsrtp/archive/v2.0.0.tar.gz
tar xfv v2.0.0.tar.gz
cd libsrtp-2.0.0
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
The Janus configure script autodetects which one you have installed and links to the correct library automatically, choosing 2.x if both are installed. If you want 1.5 or 1.6 to be picked, pass --disable-libsrtp2
when configuring Janus to force it to use the older version instead.
- Note: when installing libsrtp, no matter which version, you may need to pass
--libdir=/usr/lib64
to the configure script if you're installing on a x86_64 distribution.
If you want to make use of BoringSSL instead of OpenSSL (e.g., because you want to take advantage of --enable-dtls-settimeout
), you'll have to manually install it to a specific location. Use the following steps:
git clone https://boringssl.googlesource.com/boringssl
cd boringssl
# Don't barf on errors
sed -i s/" -Werror"//g CMakeLists.txt
# Build
mkdir -p build
cd build
cmake -DCMAKE_CXX_FLAGS="-lrt" ..
make
cd ..
# Install
sudo mkdir -p /opt/boringssl
sudo cp -R include /opt/boringssl/
sudo mkdir -p /opt/boringssl/lib
sudo cp build/ssl/libssl.a /opt/boringssl/lib/
sudo cp build/crypto/libcrypto.a /opt/boringssl/lib/
Once the library is installed, you'll have to pass an additional --enable-boringssl
flag to the configure script, as by default Janus will be built assuming OpenSSL will be used. By default, Janus expects BoringSSL to be installed in /opt/boringssl
-- if it's installed in another location, pass the path to the configure script as such: --enable-boringssl=/path/to/boringssl
If you were using OpenSSL and want to switch to BoringSSL, make sure you also do a make clean
in the Janus folder before compiling with the new BoringSSL support. If you enabled BoringSSL support and also want Janus to detect and react to DTLS timeouts with faster retransmissions, then pass --enable-dtls-settimeout
to the configure script too.
For what concerns usrsctp, which is needed for Data Channels support, it is usually not available in repositories, so if you're interested in them (support is optional) you'll have to install it manually. It is a pretty easy and standard process:
git clone https://github.com/sctplab/usrsctp
cd usrsctp
./bootstrap
./configure --prefix=/usr && make && sudo make install
- Note: you may need to pass
--libdir=/usr/lib64
to the configure script if you're installing on a x86_64 distribution.
The same applies for libwebsockets, which is needed for the optional WebSockets support. If you're interested in supporting WebSockets to control Janus, as an alternative (or replacement) to the default plain HTTP REST API, you'll have to install it manually:
git clone https://libwebsockets.org/repo/libwebsockets
cd libwebsockets
# If you want the stable version of libwebsockets, uncomment the next line
# git checkout v2.4-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
Note: if libwebsockets.org is unreachable for any reason, replace the first line with this:
git clone https://github.com/warmcat/libwebsockets.git
The same applies for Eclipse Paho MQTT C client library, which is needed for the optional MQTT support. If you're interested in integrating MQTT channels as an alternative (or replacement) to HTTP and/or WebSockets to control Janus, or as a carrier of Janus Events, you can install the latest version with the following steps:
git clone https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c
make && sudo make install
- Note: you may want to set up a different install path for the library, to achieve that, replace the last command by 'sudo prefix=/usr make install'.
In case you're interested in Nanomsg support, you'll need to install the related C library. It is usually available as an easily installable package in pretty much all repositories. The following is an example on how to install it on Ubuntu:
aptitude install libnanomsg-dev
Finally, the same can be said for rabbitmq-c as well, which is needed for the optional RabbitMQ support. In fact, several different versions of the library can be found, and the versions usually available in most distribution repositories are not up-do-date with respect to the current state of the development. As such, if you're interested in integrating RabbitMQ queues as an alternative (or replacement) to HTTP and/or WebSockets to control Janus, you can install the latest version with the following steps:
git clone https://github.com/alanxz/rabbitmq-c
cd rabbitmq-c
git submodule init
git submodule update
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
make && sudo make install
- Note: you may need to pass
--libdir=/usr/lib64
to the configure script if you're installing on a x86_64 distribution.
To conclude, should you be interested in building the Janus documentation as well, you'll need some additional tools too:
On Fedora:
yum install doxygen graphviz
On Ubuntu/Debian:
aptitude install doxygen graphviz
Compile
Once you have installed all the dependencies, get the code:
git clone https://github.com/meetecho/janus-gateway.git
cd janus-gateway
Then just use:
sh autogen.sh
to generate the configure file. After that, configure and compile as usual to start the whole compilation process:
./configure --prefix=/opt/janus
make
make install
Since Janus requires configuration files for both the core and its modules in order to work, you'll probably also want to install the default configuration files to use, which you can do this way:
make configs
Remember to only do this once, or otherwise a subsequent make configs
will overwrite any configuration file you may have modified in themeanwhile.
If you've installed the above libraries but are not interested, for instance, in Data Channels, WebSockets, MQTT and/or RabbitMQ, you can disable them when configuring:
./configure --disable-websockets --disable-data-channels --disable-rabbitmq --disable-mqtt
There are configuration flags for pretty much all external modules and many of the features, so you may want to issue a ./configure --help
to dig through the available options. A summary of what's going to be built will always appear after you do a configure, allowing you to double check if what you need and don't need is there.
If Doxygen and graphviz are available, the process can also build the documentation for you. By default the compilation process will not try to build the documentation, so if you instead prefer to build it, use the --enable-docs
configuration option:
./configure --enable-docs
You can also selectively enable/disable other features (e.g., specific plugins you don't care about, or whether or not you want to build the recordings post-processor). Use the --help option when configuring for more info.
Building on MacOS
While most of the above instructions will work when compiling Janus on MacOS as well, there are a few aspects to highlight when doing that.
First of all, you can use brew
to install most of the dependencies:
brew install jansson libnice openssl srtp libusrsctp libmicrohttpd \
libwebsockets cmake rabbitmq-c sofia-sip opus libogg curl \
glib pkg-config gengetopt autoconf automake libtool
For what concerns libwebsockets, though, make sure that the installed version is higher than 2.4.1
, or you might encounter the problems described in this post. If brew
doesn't provide a more recent version, you'll have to install the library manually.
Notice that you may need to provide a custom prefix
and PKG_CONFIG_PATH
when configuring Janus as well, e.g.:
./configure --prefix=/usr/local/janus PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig
Everything else works exactly the same way as on Linux.
Configure and start
To start the server, you can use the janus
executable. There are several things you can configure, either in a configuration file:
<installdir>/etc/janus/janus.cfg
or on the command line:
<installdir>/bin/janus --help
janus 0.5.0
Usage: janus [OPTIONS]...
-h, --help Print help and exit
-V, --version Print version and exit
-b, --daemon Launch Janus in background as a daemon
(default=off)
-p, --pid-file=path Open the specified PID file when starting Janus
(default=none)
-N, --disable-stdout Disable stdout based logging (default=off)
-L, --log-file=path Log to the specified file (default=stdout only)
-i, --interface=ipaddress Interface to use (will be the public IP)
-P, --plugins-folder=path Plugins folder (default=./plugins)
-C, --config=filename Configuration file to use
-F, --configs-folder=path Configuration files folder (default=./conf)
-c, --cert-pem=filename DTLS certificate
-k, --cert-key=filename DTLS certificate key
-K, --cert-pwd=text DTLS certificate key passphrase (if needed)
-S, --stun-server=filename STUN server(:port) to use, if needed (e.g.,
Janus behind NAT, default=none)
-1, --nat-1-1=ip Public IP to put in all host candidates,
assuming a 1:1 NAT is in place (e.g., Amazon
EC2 instances, default=none)
-E, --ice-enforce-list=list Comma-separated list of the only interfaces to
use for ICE gathering; partial strings are
supported (e.g., eth0 or eno1,wlan0,
default=none)
-X, --ice-ignore-list=list Comma-separated list of interfaces or IP
addresses to ignore for ICE gathering;
partial strings are supported (e.g.,
vmnet8,192.168.0.1,10.0.0.1 or
vmnet,192.168., default=vmnet)
-6, --ipv6-candidates Whether to enable IPv6 candidates or not
(experimental) (default=off)
-l, --libnice-debug Whether to enable libnice debugging or not
(default=off)
-f, --full-trickle Do full-trickle instead of half-trickle
(default=off)
-I, --ice-lite Whether to enable the ICE Lite mode or not
(default=off)
-T, --ice-tcp Whether to enable ICE-TCP or not (warning: only
works with ICE Lite)
(default=off)
-R, --rfc-4588 Whether to enable RFC4588 retransmissions
support or not (default=off)
-q, --max-nack-queue=number Maximum size of the NACK queue (in ms) per user
for retransmissions
-t, --no-media-timer=number Time (in s) that should pass with no media
(audio or video) being received before Janus
notifies you about this
-r, --rtp-port-range=min-max Port range to use for RTP/RTCP (only available
if the installed libnice supports it)
-n, --server-name=name Public name of this Janus instance
(default=MyJanusInstance)
-s, --session-timeout=number Session timeout value, in seconds (default=60)
-m, --reclaim-session-timeout=number
Reclaim session timeout value, in seconds
(default=0)
-d, --debug-level=1-7 Debug/logging level (0=disable debugging,
7=maximum debug level; default=4)
-D, --debug-timestamps Enable debug/logging timestamps (default=off)
-o, --disable-colors Disable color in the logging (default=off)
-M, --debug-locks Enable debugging of locks/mutexes (very
verbose!) (default=off)
-a, --apisecret=randomstring API secret all requests need to pass in order
to be accepted by Janus (useful when wrapping
Janus API requests in a server, none by
default)
-A, --token-auth Enable token-based authentication for all
requests (default=off)
-e, --event-handlers Enable event handlers (default=off)
Options passed through the command line have the precedence on those specified in the configuration file. To start the server, simply run:
<installdir>/bin/janus
This will start the server, and have it look at the configuration file.
Make sure you have a look at all of the configuration files, to tailor Janus to your specific needs: each configuration file is documented, so it shouldn't be hard to make changes according to your requirements. The repo comes with some defaults (assuming you issues make configs
after installing the server) that tend to make sense for generic deployments, and also includes some sample configurations for all the plugins (e.g., web servers to listen on, conference rooms to create, streaming mountpoints to make available at startup, etc.).
To test whether it's working correctly, you can use the demos provided with this package in the html
folder: these are exactly the same demos available online on the project website. Just copy the file it contains in a webserver, or use a userspace webserver to serve the files in the html
folder (e.g., with php or python), and open the index.html
page in either Chrome or Firefox. A list of demo pages exploiting the different plugins will be available. Remember to edit the transport/port details in the demo JavaScript files if you changed any transport-related configuration from its defaults. Besides, the demos refer to the pre-configured plugin resources, so if you add some new resources (e.g., a new videoconference) you may have to tweak the demo pages to actually use them.
Documentation
Janus is thoroughly documented. You can find the current documentation, automatically generated with Doxygen, on the project website.
Help us!
Any thought, feedback or (hopefully not!) insult is welcome!
Developed by @meetecho