Janus WebRTC Server 安装

anus 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
  • libconfig
  • 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 glib2-devel \
   opus-devel libogg-devel libcurl-devel pkgconfig gengetopt \
   libconfig-devel 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 \
	libconfig-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. 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 the PKG_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.2.0, but there may be more recent versions available:

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 

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 

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 \
	libconfig 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.jcfg 

or on the command line:

<installdir>/bin/janus --help

janus 0.7.5

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)
-H  --cwd-path                Working directory for Janus daemon process
                              (default=/)
-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
-W, --slowlink-threshold=number
                              Number of lost packets (per s) that should
                              trigger a 'slowlink' Janus API event to users
-r, --rtp-port-range=min-max  Port range to use for RTP/RTCP (only available
							  if the installed libnice supports it)
-B, --twcc-period=number      How often (in ms) to send TWCC feedback back to
                              senders, if negotiated (default=1s)
-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.

Janus WebRTC Server 安装》有2个想法

  1. fredzeng

    好记性不如个烂笔头,记录一下搭建的过程。

    前提准备
    基础环境的准备,包括服务器环境、地址、证书、防火墙配置等。

    环境准备
    操作系统:centos 7.6 x64
    一个带有SSL证书的域名
    需要开放对应的端口:8088 8188 3478 3480-3500 7000-9000 443

    证书转换
    mkdir /etc/ssl/cert/domain.com
    cd /etc/ssl/cert/domain.com
    上传证书至此目录,一般用Nginx适用的证书即可。如果有pem的最好,直接上传到此处,如果没有的话,需要转换。

    openssl rsa -in domain.com.key -text > key.pem
    openssl x509 -inform PEM -in domain.com.crt > cert.pem
    开始安装
    开始Webrtc服务的部署及安装,将分步骤详细记录。以及在按步骤执行过程中遇到的问题的处理。

    安装依赖包
    yum update
    yum -y install epel-release nginx libmicrohttpd-devel jansson-devel openssl-devel libsrtp-devel sofia-sip-devel glib2-devel opus-devel libogg-devel libcurl-devel pkgconfig gengetopt libconfig-devel libtool autoconf automake libnice libnice-devel libwebsockets libwebsockets-devel doxygen graphviz cmake gtk-doc-tools git lrzsz
    安装libsrtp
    cd ~
    wget https://github.com/cisco/libsrtp/archive/v1.5.4.tar.gz
    tar zxvf v1.5.4.tar.gz && cd libsrtp-1.5.4
    ./configure –prefix=/usr –enable-openssl –libdir=/usr/lib64
    make shared_library && sudo make install
    安装usrsctp
    cd ~
    git clone https://github.com/sctplab/usrsctp
    cd usrsctp
    ./bootstrap
    ./configure –prefix=/usr –libdir=/usr/lib64 && make && sudo make install
    安装RabbitMQ
    cd ~
    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 -DCMAKE_INSTALL_LIBDIR=/usr/lib64 ..
    make && sudo make install
    安装Janus-Gateway
    cd ~
    git clone https://github.com/meetecho/janus-gateway.git
    cd janus-gateway
    sh autogen.sh
    ./configure –prefix=/opt/janus –enable-websockets
    make
    make install
    make configs
    输出以下信息,说明./configure –prefix=/opt/janus –enable-websockets 执行成功。

    Compiler: gcc
    libsrtp version: 1.5.x
    SSL/crypto library: OpenSSL
    DTLS set-timeout: not available
    Mutex implementation: GMutex (native futex on Linux)
    DataChannels support: yes
    Recordings post-processor: no
    TURN REST API client: yes
    Doxygen documentation: no
    Transports:
    REST (HTTP/HTTPS): yes
    WebSockets: yes
    RabbitMQ: yes
    MQTT: no
    Unix Sockets: yes
    Nanomsg: no
    Plugins:
    Echo Test: yes
    Streaming: yes
    Video Call: yes
    SIP Gateway (Sofia): no
    SIP Gateway (libre): no
    NoSIP (RTP Bridge): yes
    Audio Bridge: yes
    Video Room: yes
    Voice Mail: yes
    Record&Play: yes
    Text Room: yes
    Lua Interpreter: no
    Duktape Interpreter: no
    Event handlers:
    Sample event handler: yes
    RabbitMQ event handler:yes
    MQTT event handler: no
    JavaScript modules: no
    安装CoTurn服务
    在安装CoTurn服务执行./configure时,碰到了一个报错,这里提前说明,先做解决。

    Libevent2 development is not installed properly
    ERROR: Libevent2 development libraries are not installed properly in required location.
    ERROR: may be you have just too old libevent tool – then you have to upgrade it.
    See the INSTALL file.
    Abort.
    解决办法如下:

    sudo yum install libevent libevent-devel openssl openssl-libs -y
    然后:

    cd ~
    wget https://sourceforge.net/projects/levent/files/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz/download
    mv download libevent-2.0.22-stable.tar.gz
    tar zxvf libevent-2.0.22-stable.tar.gz
    cd libevent-2.0.22-stable
    ./configure
    make
    sudo make install
    然后开始正常安装CoTurn服务。

    cd ~
    mkdir /root/webrtc
    cd /root/webrtc
    wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
    tar zxvf turnserver-4.5.0.7.tar.gz
    cd /root/webrtc/turnserver-4.5.0.7
    ./configure
    make install
    服务配置
    此处主要是涉及到turn服务及Janus服务的配置项目。

    CoTurn服务的配置
    vi /usr/local/etc/turnserver.conf
    打开后在文件中添加以下配置:

    relay-device=eth0
    listening-ip=192.168.1.100 #LocalIP
    listening-port=3478
    tls-listening-port=5349
    relay-ip=192.168.1.100 #LocalIP
    external-ip=112.112.x.x #NetIP
    relay-threads=50
    lt-cred-mech
    cert=/etc/ssl/cert/domain/cert.pem
    pkey=/etc/ssl/cert/domain/key.pem
    user=user:password123 #配置一个用户名密码
    min-port=3480
    max-port=3500
    realm=domain.com #所用的域名
    Janus配置
    vi /opt/janus/etc/janus/janus.jcfg
    找到certificates配置项,在里面打开以下内容的配置,并设置。

    certificates:
    cert_pem = “/etc/ssl/cert/domain/cert.pem”
    cert_key = “/etc/ssl/cert/domain/key.pem”
    找到nat配置项,在里面打开以下内容的配置,并设置,其中的用户名及密码为turnserver.conf中配置的用户名及密码。

    nat:
    turn_server = “domain.com”
    turn_port = 3478
    turn_type = “udp”
    turn_user = “user”
    turn_pwd = “passwd123”
    ice_enforce_list = “eth0”
    再打开janus.transport.http.jcfg进行配置。

    vi /opt/janus/etc/janus/janus.transport.http.jcfg
    分别找到general、admin、certificates三项的配置处,修改以下配置(没有提到的不用动)。

    general:
    https = true

    admin:
    admin_https = true

    certificates:
    cert_pem = “/etc/ssl/cert/domain/cert.pem”
    cert_key = “/etc/ssl/cert/domain/key.pem”
    再打开janus.transport.websockets.jcfg进行配置。

    vi /opt/janus/etc/janus/janus.transport.websockets.jcfg
    分别找到general、admin、certificates三项的配置处,修改以下配置(没有提到的不用动)。

    general:
    wss = true

    admin:
    admin_wss = true

    certificates:
    cert_pem = “/etc/ssl/cert/domain/cert.pem”
    cert_key = “/etc/ssl/cert/domain/key.pem”
    Nginx的配置
    新创建一个配置文件:

    vi /etc/nginx/conf.d/janus.conf
    添加以下内容

    server {
    licsten 80;
    listen 443 ssl;
    server_name domain.com;
    ssl_certificate /etc/ssl/cert/domain/domain.com.crt;
    ssl_certificate_key /etc/ssl/cert/domain/domain.com.key;
    charset utf-8;
    root /opt/janus/share/janus/demos;
    index index.php index.html index.htm;
    access_log /var/log/nginx/access.log main;
    location / {
    }
    }
    服务启动
    此处主要为各个服务的启动方式。

    启动Turn服务
    /usr/local/bin/turnserver -c /usr/local/etc/turnserver.conf -o
    可以查看3478端口是否被占用,若占用,则说明服务启动成功。

    netstat -nap|grep 3478
    启动Janus服务
    nohup /opt/janus/bin/janus >> /var/log/janus.log 2>&1 &
    启动Nginx服务
    systemctl restart nginx
    验证
    此时服务都已经启动,可访问https://domain.com进行验证,可打开demo中的video room后,点击start,进行验证,可在多个PC中打开,输入同一个room id进行测试。

  2. fredzeng

    一、基础资源
    操作系统:centos 7.3
    服务器IP:内网(192.168.10.17),外网(124.160.xxx.xxx)
    域名:webrtc.xxx.com (带https证书)
    防火墙开放端口:tcp/udp 3478 3480-3500 7000-9000 443
    内网域名绑定:/etc/hosts => 192.168.10.17 webrtc.xxx.com (由于本机内部访问外网IP不通)
    二、域名证书
    mkdir /cert
    将域名证书放在/cert目录下,分别命名为cert.pem,key.pem
    如果是domain.crt,domain.key 可以根据以下命令生成pem证书
    openssl rsa -in server.key -text > key.pem
    openssl x509 -inform PEM -in server.crt > cert.pem
    三、依赖包安装
    yum -y install epel-release nginx
    yum -y install libmicrohttpd-devel jansson-devel openssl-devel libsrtp-devel sofia-sip-devel glib2-devel opus-devel libogg-devel libcurl-devel pkgconfig gengetopt libconfig-devel libtool autoconf automake
    yum -y install libnice libnice-devel
    yum -y install libwebsockets libwebsockets-devel
    yum -y install doxygen graphviz
    yum -y install cmake
    wget https://github.com/cisco/libsrtp/archive/v1.5.4.tar.gz

    ./configure –prefix=/usr –enable-openssl –libdir=/usr/lib64

    make shared_library && sudo make install
    git clone https://github.com/sctplab/usrsctp

    ./bootstrap

    ./configure –prefix=/usr –libdir=/usr/lib64 && make && sudo make install
    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 -DCMAKE_INSTALL_LIBDIR=/usr/lib64 ..

    make && sudo make install
    git clone https://github.com/meetecho/janus-gateway.git

    cd janus-gateway

    sh autogen.sh

    ./configure –prefix=/opt/janus –enable-websockets

    make

    make install

    make configs
    STUN\TURN服务器

    cd /root/webrtc

    wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz

    tar xvfz turnserver-4.5.0.7.tar.gz

    cd /root/webrtc/turnserver-4.5.0.7

    ./configure

    make install

    vim /usr/local/etc/turnserver.conf
    relay-device=bond0

    listening-ip=192.168.10.17 #内网IP

    listening-port=3478

    tls-listening-port=5349

    relay-ip=192.168.10.17

    external-ip=124.160.xxx.xxx #外网IP

    relay-threads=50

    lt-cred-mech

    cert=/cert/cert.pem

    pkey=/cert/key.pem

    user=xie:123456

    min-port=3480

    max-port=3500

    realm=webrtc.xxx.com
    nginx 配置 vim /etc/nginx/conf.d/janus.conf
    server {
    listen 443 ssl;
    server_name webrt.xxx.com;
    ssl_certificate /etc/nginx/ssl/xxx.com.crt;
    ssl_certificate_key /etc/nginx/ssl/xxx.com.key;
    charset utf-8;
    root /opt/janus/share/janus/demos;
    index index.php index.html index.htm;
    access_log /var/log/nginx/access.log main;
    location / {
    }
    }
    四、Janus环境配置(变动部分)
    vim /opt/janus/etc/janus/janus.jcfg

    certificates:

    cert_pem = “/cert/cert.pem”

    cert_key = “/cert/key.pem”

    nat:

    turn_server = “webrtc.xxx.com”

    #turn_server = “192.168.10.17”

    turn_port = 3478

    turn_type = “udp”

    turn_user = “xie”

    turn_pwd = “123456”

    ice_enforce_list = “bond0”
    vim /opt/janus/etc/janus/janus.transport.http.jcfg

    general:

    https = true

    admin:

    admin_https = true

    certificates:

    cert_pem = “/cert/cert.pem”

    cert_key = “/cert/key.pem”
    vim /opt/janus/etc/janus/janus.transport.websockets.jcfg

    general:

    wss = true

    admin:

    admin_wss = true

    certificates:

    cert_pem = “/cert/cert.pem”

    cert_key = “/cert/key.pem”
    五、启动相关软件
    a.启动STUN\TURN服务器
    /usr/local/bin/turnserver -c /usr/local/etc/turnserver.conf -o
    非常重要,telnet 内网/外网/域名 IP 3478 端口 都要通才行
    iCE测试地址:https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
    b.启动janus-gateway server
    /opt/janus/bin/janus -b
    c.启动nginx
    systemctl restart nginx
    六、两个pc之间测试
    房间测试地址:https://webrtc.xxx.com/videoroomtest.html 比较简单这里就不贴图了,最后祝福大家新年快乐

    janus 的demo 对浏览器兼容不是很好

    本文主要参考:https://github.com/meetecho/janus-gateway

发表评论