Ubuntu下搭建Janus Server


目录

  1. Janus简介
  2. 下载和编译 Janus
  3. 配置和运行janus
  4. 视频通话联调测试

1. Janus简介

  1. Janus 是一个开源的,通过 C 语言实现了对 WebRTC 支持的 Gateway。
  2. Janus 自身实现得很简单,提供插件机制来支持不同的业务逻辑,配合官方自带插件就可以用来实现高效的 Media Server 服务。
  3. 本博客在 Ubuntu下搭建 Janus 服务器,实现 janus 官方 Demo 浏览器与 Android APP Demo(janus-gateway-android)之间的音视频通话。注意:浏览器打开音视频采集的话需要 HTTPS 加密访问。

2. 下载和编译 Janus

  1. 编译运行 Janus Server 需要依赖较多的一些第三方库,而这些依赖库在 Ubuntu 下主要通过 aptitude 进行安装,首先通过安装 aptitude:
sudo apt-get install aptitude
sudo apt-get update
  1. 执行以下命令更新镜像源
sudo apt-get update && sudo apt-get upgrade

1. 命令安装依赖

  1. Ubuntu 下通过 aptitude 批量安装依赖工具包
  2. 批量安装命令:
 sudo apt install build-essentialsudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev  libsofia-sip-ua-dev \libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt \libtool automakesudo aptitude install libglib2.3.4-dev  sudo apt install cmake
sudo aptitude install libconfig-dev
sudo aptitude install libssl-dev
sudo aptitude install doxygen graphviz# ffmpeg库 支持--enable-post-processing
sudo aptitude install libavcodec-dev libavformat-dev libswscale-dev libavutil-dev
  1. 附录:卸载命令
apt-get remove 会删除软件包而保留软件的配置文件
apt-get purge 会同时清除软件包和软件的配置文件
  1. 查找包命令
查找软件包
apt-cache search 软件包名
显示软件包的详细信息
apt-cache show 软件包名

2. 源码安装依赖

1. 安装 WebSocket

  1. janus 支持 WebSocket 是可选项,如果不安装,编译 janus 时,默认不支持 WebSocket 的链接请求,而 Android APP Demo 是通过 WebSocket 与 janus 进行通信的,因此如果需要 Android APP Demo 能与浏览器(HTTP)进行视频通话,所以就必须要在编译 janus 时支持 WebSocket。
  2. 依次执行以下命令,分别进行下载,编译,安装:
git clone https://gitee.com/embedded-lib/libwebsockets.git
或 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
  1. 安装成功后,在编译 janus 时,janus 默认会增加对 WebSocket 的集成,或者通过增加编译参数 --enable-websockets 打开 WebSocket 开关

2. 安装 libsrtp

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

3. 安装libmicrohttpd

  1. 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

3. 编译 Janus

  1. 通过 Git 下载 Janus 源码,并编译安装:
git clone https://gitee.com/easyhao/janus-gateway.git
或git clone https://github.com/meetecho/janus-gateway.git
cd janus-gateway
git tag 查看当前的 tag,选择最新稳定的版本v0.10.4
git  checkout v0.10.4
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets --enable-post-processing --enable-docs --enable-rest
make
sudo make install
  1. make install的时候,将janus安装到 /opt/janus路径,插件的so库在/opt/janus/lib/janus/plugins

  2. 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):     yesWebSockets:            yesRabbitMQ:              noMQTT:                  noUnix Sockets:          yesNanomsg:               no
Plugins:Echo Test:             yesStreaming:             yesVideo Call:            yesSIP Gateway:           yesNoSIP (RTP Bridge):    yesAudio Bridge:          yesVideo Room:            yesVoice Mail:            yesRecord&Play:           yesText Room:             yesLua Interpreter:       noDuktape Interpreter:   no
Event handlers:Sample event handler:  yesWebSocket ev. handler: yesRabbitMQ event handler:noMQTT event handler:    noNanomsg event handler: noGELF event handler:    yes
External loggers:JSON file logger:      no
JavaScript modules:        no

3. 配置和运行janus

1. 配置nginx

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

1. 生成证书

mkdir -p ~/cert
cd ~/cert
# CA私钥
openssl genrsa -out key.pem 2048自签名证书
openssl req -new -x509 -key key.pem -out cert.pem -days 1095

2. 安装nginx

#下载nginx 1.15.8版本
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

3. 修改nginx配置文件

  1. Nginx配置文件默认在 /usr/local/nginx/conf/nginx.conf
  2. 指向janus所在目录/opt/janus/share/janus/demos
    # HTTPS server#server {listen       443 ssl;server_name  localhost;# 配置相应的keyssl_certificate      /root/cert/cert.pem;ssl_certificate_key  /root/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;}}

4. 启动nginx

sudo /usr/local/nginx/sbin/nginx
  1. 然后通过 https://服务器公网地址(比如:https://8.141.75.xxx/)就可以访问到界面,但此时还不能正常通话。
  2. 注意如果访问不通,需要设置安全组,添加80和443端口
  3. 如果提示在Chrome中打开网页时出现以下问题:您的连接不是私密连接 攻击者可能会试图从 x.x.x.x 窃取您的信息(例如:密码、通讯内容或信用卡信息),直接在页面输入:thisisunsafe ,回车,页面即会自动刷新进入网页。

2. 安装和启动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
  1. 启动
sudo nohup turnserver -L 0.0.0.0 --min-port 50000 --max-port 60000  -a -u xxx:123456 -v -f -r nort.gov &
  1. 需要在安全组开放端口: TCP/UDP 3478 和 UDP 50000-60000

3. 配置janus的jcfg文件

  1. janus安装目录在/opt/janus
./bin ./etc ./include ./lib ./share
可执行文件 janus配置文件 janus头文件 janus库 存放脚本或者文档,web demo也在这里

1. 配置Video room

  1. 先配置video room,需要配置的文件为(目录/opt/janus/etc/janus),并开通8088,8089,8188,8989端口
  2. 要先把.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

2. 配置janus.jcfg

# 大概237行
stun_server = "8.141.75.xxx"stun_port = 3478nice_debug = false
# 大概267行 填写云服务器外网ip地址
nat_1_1_mapping = "8.141.75.xxx"
​
#大概274# credentials to authenticate...turn_server = "8.141.75.xxx"turn_port = 3478turn_type = "udp"turn_user = "ljw"turn_pwd = "123456"
  1. ​大约202行左右,设置udp端口范围。

3. 配置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 poolhttp = true                                             # Whether to enable the plain HTTP interfaceport = 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) onlyhttps = 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.pem一样路径cert_key = "/home/ubuntu/cert/key.pem"#cert_pwd ="secretpassphrase"#ciphers ="PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}

4. 配置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 APIws_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 onlywss = true                                              # Whether to enable secure WebSocketswss_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"
}

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

  1. 修改 /opt/janus/share/janus/demos/videoroomtest.js文件,原来为(在45行处)
var server = null;
if(window.location.protocol === 'http:')server = "http://" + window.location.hostname + ":8088/janus";
elseserver = "https://" + window.location.hostname + ":8089/janus";
将默认的https协议改为wss
var server = "wss://" + window.location.hostname + ":8989";

5. 配置coturn地址-这里不是必须的

  1. 这里不是必须的
  2. 修改 /opt/janus/share/janus/demos/videoroomtest.js 文件,配置自己搭建的coturn地址,以下ip、用户名,密码根据实际修改。在约83行添加。
iceServers :[{urls: ["turn:8.141.75.xxx:3478?transport=udp","turn:8.141.75.xxx:3478?transport=tcp"      ],username: "ljw",credential: "123456"
},
{urls: ["stun:8.141.75.xxx:3478"]
}],

6. 云服务器端口开放

  1. 需要用到的端口有:TCP的8088,8089,8188,8989,3478,UDP的3478,50000~60000端口

7. 运行 Janus

  1. WebSocket 的ws端口号为 8188 和 8989,记住这个端口号,在 Android APP Demo 中会使用到
  2. 启动 Janus:
/opt/janus/bin/janus --debug-level=5 --log-file=$HOME/janus-log
  1. 根据需要可以选择是否加上后面两个启动参数。

8. 测试web和web的通话

  1. 打开 https://8.141.75.xxx/videoroomtest.html
  2. 开两个同样的网页,然后点击start,输入名字则开始进行音视频通话测试。

4. 视频通话联调测试

  1. 我们使用 PC 下的 浏览器 与 Android APP Demo 进行联调,有空补上。

Ubuntu下搭建Janus Server相关推荐

  1. linux lighttpd php,Ubuntu下搭建Lighttpd+PHP+MySQL环境

    简单的几个命令在Ubuntu下搭建Lighttpd+PHP+MySQL环境,Lighttpd是众多OpenSource轻量级的web server中较为优秀的一个.支持FastCGI, CGI, Au ...

  2. ubuntu下搭建android开发环境(转载)

    在ubuntu下搭建android开发环境,准备学习一下android开发. 1.安装JDK        首先到oracle的官网上下载linux版本的JDK(网址为:http://www.orac ...

  3. ubuntu下搭建android开发环境(四)核心篇安装AndroidStudio、sdk、jdk

    [置顶] ubuntu下搭建android开发环境(四)核心篇安装AndroidStudio.sdk.jdk(by 星空武哥) <div class="article_manage c ...

  4. Ubuntu 下搭建 Nginx 部署 vue 项目

    Ubuntu 下搭建 Nginx 部署 vue 项目 上一篇:Ubuntu 下部署 SpringBoot 第一步: Ubuntu 上安装 nodejs 执行 apt install nodejs 命令 ...

  5. Ubuntu下搭建postgresql主从服务器(方法1)

    Ubuntu下搭建postgresql主从服务器(方法1) 安装略 postgresql主服务器: $ vi /etc/postgresql/9.1/main/postgresql.conf 按a或i ...

  6. linux如何搭建mqtt服务器,【MQTT】在Ubuntu下搭建MQTT服务器

    前言 博主之前写了一篇<在Windows下搭建MQTT服务器>,这次要尝试在Ubuntu下搭建MQTT服务器.实际上,下载好源码包后,后面的都和那篇文章差不多了. 开发环境 虚拟机 Ubu ...

  7. 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台

    最新教程:http://www.cnblogs.com/linezero/p/aspnetcoreubuntu.html 无需安装mono,在Linux(Ubuntu)下搭建ASP.NET Core环 ...

  8. linux 搭建开发stm32 stlink,Ubuntu下搭建stm32+stlink的开发环境

    Ubuntu下搭建stm32+stlink的开发环境 热度 3已有 15960 次阅读2014-8-19 21:09 | 上周因为忙于别的事情,很久没切到ubuntu下了,这周继续弄了弄. 弄到了一些 ...

  9. Ubuntu下搭建MPI并行计算环境

    Ubuntu下搭建MPI并行计算环境 [日期:2012-10-10] 来源:Linux社区 作者:hs794502825 [字体:大 中 小] 在这里面可以选择一个合适的openmpi安装包,此处我选 ...

最新文章

  1. 对中国医学影像AI产品商业化的思考
  2. 编写高质量的Objective-C代码
  3. 服务器中显示存储设备,服务器节点信息集中显示方法、系统、设备及存储介质...
  4. poj 2914(stoer_wanger算法求全局最小割)
  5. canvas粒子动画
  6. Qt文档阅读笔记-Q_CLASSINFO官方解析与实例
  7. 8个超炫酷的jQuery相册插件欣赏
  8. Oracle数据库基础1-数据类型与约束
  9. 数据库与MySQL基本知识
  10. SQL 日期交差判断
  11. Fruits类,简单水果价格系统----java
  12. win10笔记本cpu不高内存也不高但就是很卡,一个办法帮你解决!
  13. javascript11位手机号码正则表达式
  14. 把色*版 “微信” 的底裤都给挖出来了,网友: 草率了。。。
  15. 如何将图片背景变为透明色
  16. 微服务架构的基础框架选择
  17. Kahan求和公式原理
  18. 服务器支持gd库,虚拟主机是否支持gd库
  19. 工作一年之后的记录与总结
  20. 视频流分片后的ts片,H265压缩。复制时间流命令

热门文章

  1. tengine安装问题
  2. 操作主机 Infrastructure Master[为企业维护windows server 2008系列八]
  3. 《嵌入式系统可靠性设计技术及案例解析》读书笔记(五)
  4. MySQL之mysql客户端工作的批处理一些使用手法
  5. hdu5831 Rikka with Parenthesis II
  6. POJ - 3683 Priest John's Busiest Day(2-SAT+路径打印)
  7. CodeForces - 1000D Yet Another Problem On a Subsequence(动态规划+组合数学)
  8. AcWing - 175 电路维修(思维建边+最短路)
  9. 鸿蒙系统发红包,鸿蒙修真录红包版
  10. 卷积神经网络结构可视化工具PlotNeuralNet