unbutu 18.04 下 Janus 安装

下载和编译 Janus

编译运行 Janus Server 需要依赖较多的一些第三方库,而这些依赖库在 Ubuntu 下主要通过 aptitude 进行安装,首先通过安装 aptitude:

sudo apt-get install aptitude

1.1 命令安装依赖

Ubuntu 下通过 aptitude 批量安装依赖工具包,这里建议 Ubuntu 镜像源(/etc/apt/source.list)不要为了追求速度而改用了国内的某些镜像源,这可能会导致某些工具包下载失败,建议依然使用官方自带的镜像源。

sudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev \
libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev \
libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt \
libtool automake cmake libconfig-dev doxygen graphviz

如果出现某个工具包下载失败,请修改镜像源为官方地址,并执行以下命令

sudo apt-get update && sudo apt-get upgrade 以更新镜像源,完成后重新安装。

1.2 源码安装依赖

janus 支持 WebSocket 是可选项,如果不安装,编译 janus 时,默认不支持 WebSocket 的链接请求,而 Android APP Demo 是通过 WebSocket 与 janus 进行通信的,因为我们希望 Android APP Demo 能与浏览器(HTTP)进行视频通话,所以就必须要在编译 janus 时支持 WebSocket。

依次执行以下命令,分别进行下载,编译,安装:

git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
git branch -a 查看选择最新的稳定版本,目前的是remotes/origin/v4.1-stable
git checkout v4.1-stable 切换到最新稳定版本
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make && sudo make install

安装成功后,在编译 janus 时,janus 默认会增加对 WebSocket 的集成,或者通过增加编译参数 --enable-websockets 打开 WebSocket 开关,或 --disable-websockets 关闭 WebSocket 开关。

1.2.2 安装 libsrtp

Janus 需要至少 version 1.5 以上的 libsrtp,如果系统中已经安装了 libsrtp,则首先卸载后,手动安装新版本,这里我们安装 libsrtp 2.2,依次执行以下命令:

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

1.2.3 安装libusrsctp

libusrsctp支持--enable-data-channels

git clone https://github.com/Kurento/libusrsctp.git

cd libusrsctp

./bootstrap

./configure 

make

sudo make install

1.2.4 安装libmicrohttpd

libmicrohttpd支持--enable-rest

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


1.3 编译 Janus

通过 Git 下载 Janus 源码,并编译安装:

git clone https://github.com/meetecho/janus-gateway.git
git tag 查看当前的 tag,选择最新稳定的版本v0.11.2
git  checkout -b v0.10.1
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets --enable-post-processing --enable-docs --enable-rest --enable-data-channels
make
sudo make install

报错:error: Doxygen 1.8.13 too new 

上 Doxygen 官网下载最新版本安装: Doxygen Manual: Installation

                                                        : Doxygen: Downloads  

Could NOT find FLEX (missing: FLEX_EXECUTABLE)
 执行:sudo apt-get install flex

Could NOT find BISON (missing: BISON_EXECUTABLE)
执行: sudo apt-get install bison

libnice 1.4不兼容,下载libnice-0.1.16 编译安装。

make install的时候,将janus安装到 /opt/janus路径,插件的so库在/opt/janus/lib/janus/plugins

(如果报No package 'libavutil' found
No package 'libavcodec' found
No package 'libavformat' found ,执行apt-get install libavutil-dev libavcodec-dev  libavformat-dev)

configure 执行成功后,会输出 janus 所支持的 协议及插件,如下:

ompiler:                  gcc
libsrtp version:           2.x
SSL/crypto library:        OpenSSL
DTLS set-timeout:          not available
Mutex implementation:      GMutex (native futex on Linux)
DataChannels support:      yes
Recordings post-processor: yes
TURN REST API client:      yes
Doxygen documentation:     yes
Transports:
    REST (HTTP/HTTPS):     yes
    WebSockets:            yes
    RabbitMQ:              no
    MQTT:                  no
    Unix Sockets:          yes
    Nanomsg:               no
Plugins:
    Echo Test:             yes
    Streaming:             yes
    Video Call:            yes
    SIP Gateway:           yes
    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
    WebSocket ev. handler: yes
    RabbitMQ event handler:no
    MQTT event handler:    no
    Nanomsg event handler: no
    GELF event handler:    yes
External loggers:
    JSON file logger:      no
JavaScript modules:        no


2 配置和运行janus

安装nginx,主要用来提供web访问。

使用阿里云的证书。

安装nginx

wget http://nginx.org/download/nginx-1.20.1.tar.gz

cd nginx-1.20.1

./configure --with-http_ssl_module

make 

sudo make intsall

修改nginx配置文件
/usr/local/nginx/conf/nginx.conf

指向janus所在目录/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;
                # 指向janus demo所在目录
        location / {
            root   /opt/janus/share/janus/demos;
            index  index.html index.htm;
        }
    }

启动nginx

sudo /usr/local/nginx/sbin/nginx  

然后通过

https://192.168.5.12/

可以访问到界面,但此时还不能正常通话。

unbutu 18.04 下 Janus 安装_第1张图片

2.2 安装和启动coturn

 sudo apt-get install libssl-dev
 sudo apt-get install libevent-dev

#git clone https://github.com/coturn/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

 nohup turnserver -L 0.0.0.0 --min-port 30000 --max-port 60000 -a -u root:yh123456 -v -f -r nort.gov &

turn 服务器检测地址:

https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 

2.3  配置janus的jcfg文件

配置Video room

我们先配置video room

需要配置的文件为(目录/opt/janus/etc/janus):

并开通8088,8089;8188,8989

要先把.sample后缀的文件拷贝成jcfg后缀

# 进到对应的目录
cd /opt/janus/etc/janus
# 拷贝文件
sudo cp janus.jcfg.sample janus.jcfg
sudo cp janus.transport.http.jcfg.sample janus.transport.http.jcfg
sudo cp janus.transport.websockets.jcfg.sample janus.transport.websockets.jcfg
sudo cp janus.plugin.videoroom.jcfg.sample janus.plugin.videoroom.jcfg
sudo cp janus.transport.pfunix.jcfg.sample janus.transport.pfunix.jcfg
sudo cp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.jcfg
sudo cp janus.plugin.recordplay.jcfg.sample janus.plugin.recordplay.jcfg
sudo cp janus.plugin.voicemail.jcfg.sample janus.plugin.voicemail.jcfg
sudo cp janus.plugin.sip.jcfg.sample janus.plugin.sip.jcfg
sudo cp janus.plugin.nosip.jcfg.sample janus.plugin.nosip.jcfg
sudo cp janus.plugin.textroom.jcfg.sample janus.plugin.textroom.jcfg
sudo cp janus.plugin.echotest.jcfg.sample janus.plugin.echotest.jcfg


配置janus.jcfg

# 大概237行
stun_server = "192.168.5.12"
        stun_port = 3478
        nice_debug = false

#大概274行
# credentials to authenticate...
        turn_server = "192.168.5.12"
        turn_port = 3478
        turn_type = "udp"
        turn_user = "lqf"
        turn_pwd = "123456"

配置janus.transport.http.jcfg

general: {
        #events = true                                  # Whether to notify event handlers about transport events (default=true)
        json = "indented"                               # Whether the JSON messages should be indented (default),
                                                                        # plain (no indentation) or compact (no indentation and no spaces)
        base_path = "/janus"                    # Base path to bind to in the web server (plain HTTP only)
        threads = "unlimited"                   # unlimited=thread per connection, number=thread pool
        http = true                                             # Whether to enable the plain HTTP interface
        port = 8088                                             # Web server HTTP port
        #interface = "eth0"                             # Whether we should bind this server to a specific interface only
        #ip = "192.168.0.1"                             # Whether we should bind this server to a specific IP address (v4 or v6) only
        https = true                                    # Whether to enable HTTPS (default=false)
        secure_port = 8089                              # Web server HTTPS port, if enabled
        #secure_interface = "eth0"              # Whether we should bind this server to a specific interface only
        #secure_ip = "192.168.0.1"              # Whether we should bind this server to a specific IP address (v4 or v6) only
        #acl = "127.,192.168.0."                # Only allow requests coming from this comma separated list of addresses
}

certificates: {
        cert_pem = "/home/ubuntu/cert/cert.pem"
        cert_key = "/home/ubuntu/cert/key.pem"
        #cert_pwd = "secretpassphrase"
        #ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}
image.png

image.png

配置janus.transport.websockets.jcfg

general: {
        #events = true                                  # Whether to notify event handlers about transport events (default=true)
        json = "indented"                               # Whether the JSON messages should be indented (default),
                                                                        # plain (no indentation) or compact (no indentation and no spaces)
        #pingpong_trigger = 30                  # After how many seconds of idle, a PING should be sent
        #pingpong_timeout = 10                  # After how many seconds of not getting a PONG, a timeout should be detected

        ws = true                                               # Whether to enable the WebSockets API
        ws_port = 8188                                  # WebSockets server port
        #ws_interface = "eth0"                  # Whether we should bind this server to a specific interface only
        #ws_ip = "192.168.0.1"                  # Whether we should bind this server to a specific IP address only
        wss = true                                              # Whether to enable secure WebSockets
        wss_port = 8989                         # WebSockets server secure port, if enabled
        #wss_interface = "eth0"                 # Whether we should bind this server to a specific interface only
        #wss_ip = "192.168.0.1"                 # Whether we should bind this server to a specific IP address only
        #ws_logging = "err,warn"                # libwebsockets debugging level as a comma separated list of things
                                                                        # to debug, supported values: err, warn, notice, info, debug, parser,
                                                                        # header, ext, client, latency, user, count (plus 'none' and 'all')
        #ws_acl = "127.,192.168.0."             # Only allow requests coming from this comma separated list of addresses
}

certificates: {
        cert_pem = "/home/ubuntu/cert/cert.pem"
        cert_key = "/home/ubuntu/cert/key.pem"
        #cert_pwd = "secretpassphrase"
}


2.4 修改网页默认支持的wss协议

修改 /opt/janus/share/janus/demos/videoroomtest.js文件

原来为(在45行处)

var server = null;
if(window.location.protocol === 'http:')
        server = "http://" + window.location.hostname + ":8088/janus";
else
        server = "https://" + window.location.hostname + ":8089/janus";
将默认的https协议改为wss

var server = "wss://" + window.location.hostname + ":8989";

2.5 运行 Janus

WebSocket 的ws端口号为 8188和8989,记住这个端口号,在 Android APP Demo 中会使用到!

启动 Janus:

/opt/janus/bin/janus --debug-level=5 --log-file=$HOME/janus-log

image.png

webscoket 一定要启动ws和wss(安全的ws,类比http-https)。

2.7 测试web和web的通话

https://192.168.5.12/videoroomtest.html

开两个同样的网页,然后点击start,输入名字则开始进行音视频通话测试。

3 视频通话联调测试

我们使用 PC 下的 浏览器 与 Android APP Demo 进行联调。


3.1  启动 Web Demo

这样外部便可以通过 https://111.229.231.225进行访问了,进入首页后,找到 videoRoom,Start

3.2 启动 Android APP Demo


3.2.1 下载源码

git clone https://github.com/pcgpcgpcg/janus-gateway-android.git

janus-gateway-android 支持两个 Demo 测试:EchoTest 和 VideoRoom,默认情况下会启用 EchoTest,这个 Demo 仅仅是连接服务器后,将数据再发回本地进行本地测试,我们要改为与房间内的其它用户(浏览器)进行视频通话,则需要启用另外一个测试用例 VideoRoom,按照如下方式修改代码:
APP Demo 是通过 WebSocket 连接 Janus Server,所以修改 VideoRoomTest.java 中 roomUrl地址为我们启动的 Janus 服务器 WebSocket 地址,IP 为 janus server 地址,端口默认为 8188:
janus-gateway-android 支持两个 Demo 测试:EchoTest 和 VideoRoom,默认情况下会启用 EchoTest,这个 Demo 仅仅是连接服务器后,将数据再发回本地进行本地测试,我们要改为与房间内的其它用户(浏览器)进行视频通话,则需要启用另外一个测试用例 VideoRoom,按照如下方式修改代码:
APP Demo 是通过 WebSocket 连接 Janus Server,所以修改 VideoRoomTest.java 中 roomUrl地址为我们启动的 Janus 服务器 WebSocket 地址,IP 为 janus server 地址,端口默认为 8188:

image.png
然后,搜索39.106.100.180,替换为自己的IP。

3.2.3 修改build.gradle

image.png

加上

maven{ url'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://developer.huawei.com/repo/' }
jcenter { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
否则下载不了部分组件。

3.2.4 编译安装
通过 Android studio 进行编译安装到 Android 机。

安装好后的

image.png

3.3 联调测试

Janus Server 默认会开启两个视频房间:1234 和 5678,分别使用 VP8 和 VP9 视频编码器,所以我们通过 Brower 和 Android APP Demo 进行联调测试时,暂不需要设置房间 ID。

你可能感兴趣的:(Janus,ubuntu,linux)