【网络通信 -- 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

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶