【网络通信 -- WebRTC】项目实战记录 -- Janus 环境搭建

2024-01-08 16:30

本文主要是介绍【网络通信 -- WebRTC】项目实战记录 -- Janus 环境搭建,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【网络通信 -- WebRTC】项目实战记录 -- Janus 环境搭建

【1】安装准备

【1.1】安装依赖

安装 aptitu
sudo apt-get install aptitudesudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev \libssl1.0.1-dev libsrtp-dev libsofia-sip-ua-dev libglib2.3.4-dev \libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt \libtool automakesudo apt install cmake
sudo aptitude install libconfig-dev
sudo aptitude install libssl-dev
sudo aptitude install doxygen graphviz
sudo aptitude install libavcodec-dev libavformat-dev libswscale-dev libavutil-dev

【2】Janus 插件选择与安装

janus 支持插件式功能安装,根据需求选择安装

安装插件如下

libwebsockets(支持 WebSocket)
libsrtp 和 libusrsctp(音视频流传输控制和数据协议支持)
libmicrohttpd(支持 http/https)
Janus
nginx(提供 web 服务)

【2.1】libwebsockets

git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
git checkout v3.2-stable 
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make
make install

【2.2】libsrtp

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 
make install

【2.3】libusrsctp

git clone https://github.com/Kurento/libusrsctp.git
cd libusrsctp
./bootstrap
./configure
make
make install

【2.4】libmicrohttpd

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
make install

【2.5】Janus

git clone https://github.com/meetecho/janus-gateway.git
git  checkout v0.10.4
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets --enable-post-processing --enable-docs --enable-rest --enable-data-channels
make
make install

【2.6】Nginx

【2.6.0】下载 nginx-rtmp-module

wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
unzip master.zip

【2.6.1】安装 Nginx

wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar xvzf nginx-1.15.8.tar.gz
cd nginx-1.15.8/
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module-master --with-http_ssl_module
make
make install

【2.6.2】生成签名证书

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.6.3】配置 Nginx

vim /usr/local/nginx/conf/nginx.conf

修改配置文件如下

# 开启 HTTPS 功能
server {listen       443 ssl;server_name  localhost;ssl_certificate      自己的证书路径/cert.pem;   #自己的证书ssl_certificate_key  自己的证书路径/key.pem;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location / { root   /opt/janus/share/janus/demos;  #web网页打开时,定位到这里index  index.html index.htm;}
}# 开启 RTMP 功能
rtmp {  server {  listen 1900;  application myapp {  live on;  }}  
}

【2.6.4】Nginx 启停指令

# 启动和关闭nginx
sudo /usr/local/nginx/sbin/nginx
sudo /usr/local/nginx/sbin/nginx -s  stop

【2.6.5】Nginx 测试

【2.7】TurnServer

【2.7.1】安装 TurnServer

sudo apt-get install libssl-dev
sudo apt-get install libevent-devwget 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
sudo ./configure
sudo make
sudo make install

【2.7.2】启动 TurnServer

# 注意此处的用户名与密码需要与 janus.jcfg 中的配置一致
sudo nohup turnserver -L 0.0.0.0 --min-port 30000 --max-port 60000 -a -u CopperSun:sungaopeng -v -f -r nort.gov &

【3】运行 Janus 官方 DEMO

备份 Janus 配置文件

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

修改 janus.jcfg 配置 turn server

nat: {stun_server = "172.16.4.78"stun_port = 3478nice_debug = false#full_trickle = true#ice_lite = true#ice_tcp = trueturn_server = "172.16.4.78"turn_port = 3478turn_type = "udp"turn_user = "CopperSun"turn_pwd = "sungaopeng"
}

修改 janus.transport.http.jcfg 以开启 https 和增加证书

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 = "自己的证书路径/cert.pem"cert_key = "自己的证书路径/key.pem"#cert_pwd = "secretpassphrase"#ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}

修改 janus.transport.websockets.jcfg 以开启 wss 和增加证书

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 detectedws = 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 = "自己的证书路径/cert.pem"cert_key = "自己的证书路径/key.pem"#cert_pwd = "secretpassphrase"
}

修改 Janus demo 增加 wss 支持

vim /opt/janus/share/janus/demos/videoroomtest.jsvar server = null;
if(window.location.protocol === 'http:')server = "http://" + window.location.hostname + ":8088/janus";
else#server = "https://" + window.location.hostname + ":8089/janus";server = "wss://" + window.location.hostname + ":8989";

启动 Janus

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

【4】Janus 示例代码

Android 端,https://github.com/pcgpcgpcg/janus-gateway-android

PC Windows 端,https://github.com/pcgpcgpcg/janus_gateway_win

Web 端,https://github.com/pcgpcgpcg/rtc_web_demo

附录

【1】云服务器上相关配置 -- 使能相关端口

【2】Android 端代码修改

修改配置 Janus 服务器 IP 地址

修改 build.gradle

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' }

问题与解决方案

  • 问题一

configure: error: Package requirements (libcrypto >= 1.0.1) were not met:

  • 解决方案

安装 openssl,注意添加 shared 标识标识强制生成动态库,否则会出现静态库链接生成动态库的错误

wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz
tar xf openssl-1.0.2l.tar.gz
cd openssl-1.0.2l
sudo ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
make && make install

设置 PKG_CONFIG_PATH 环境变量

export PKG_CONFIG_PATH=/usr/local/ssl/lib/pkgconfig/:$PKG_CONFIG_PATH
  • 问题二

  • 解决方案
安装 doxygensudo apt-get install flex
sudo apt-get install bisongit clone https://github.com/doxygen/doxygen.git
cd doxygen
mkdir build
cd build
cmake -G "Unix Makefiles" ..
make
sudo make install
doxygen --version

参考致谢

本博客为博主的学习实践总结,并参考了众多博主的博文,在此表示感谢,博主若有不足之处,请批评指正。

【1】Ubuntu16.04 中 搭建Janus Server

【2】ubuntu安装python3.7,并更新python默认指向为python3.7

【3】ubuntu18.04 安装新版本openssl

【4】doxygen安装(doxygen的编译依靠cmake)

这篇关于【网络通信 -- WebRTC】项目实战记录 -- Janus 环境搭建的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/584085

相关文章

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

Vue项目中Element UI组件未注册的问题原因及解决方法

《Vue项目中ElementUI组件未注册的问题原因及解决方法》在Vue项目中使用ElementUI组件库时,开发者可能会遇到一些常见问题,例如组件未正确注册导致的警告或错误,本文将详细探讨这些问题... 目录引言一、问题背景1.1 错误信息分析1.2 问题原因二、解决方法2.1 全局引入 Element

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI