当前位置: 首页 > news >正文

WebRTC 服务器之Janus概述和环境搭建

1 概述

          Janus 是由 Meetecho 开发的通用 WebRTC 服务器,它为构建 WebRTC 应用程序提供了一个模块化框架。服务器目标:Janus WebRTC 网关被设计为轻量级、通用的 WebRTC 服务器,除了实现以下方法外,它本身不提供任何功能:

  • 设置与浏览器的 WebRTC 媒体通信
  • 在客户端和服务器之间交换 JSON 消息
  • 在浏览器和服务器端应用程序逻辑之间中继 RTP/RTCP 和消息

        实际功能是在浏览器通过 Janus 核心连接的服务器端插件中实现的。这种模块化架构允许占用空间小,同时提供最大的灵活性。

1.1 主要特点

  • 模块化架构:将核心 WebRTC 功能与应用程序特定逻辑分离
  • 轻量级核心:用 C 语言编写,占用空间小
  • 插件系统:可通过各种应用程序(视频会议、流媒体、SIP 网关等)的插件进行扩展
  • 多种传输机制:支持 HTTP/REST、WebSockets、RabbitMQ、MQTT 和 Unix 套接字
  • 会话管理:处理连接、WebRTC 会话和插件附件
  • 媒体处理:处理媒体协商、编码和传输
  • 录制功能:支持录制 WebRTC 会话

2 janus搭建

云服务器端口开放(本地虚拟机环境则关闭防火墙即可)需要在安全组开放端口:

TCP/UDP 3478

UDP 30000-60000

2.1基础环境

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

2.2 源码安装依赖

2.2.1 安装 WebSocket

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

2.2.2 安装 libsrtp

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

2.2.3 安装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
sudo make install

2.2.4安装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/# 配置,一定要支持https
./configure --with-http_ssl_module make
sudo make install 

2.3 编译 Janus

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

3 配置文件和运行janus

3.1 基础环境配置

3.1.1 基于https生成ssl证书

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

3.1.2设置全局域名IP对应关系

后面需要填写一大堆ip,为了方便修改ip我们在 Ubuntu 中将 IP 作为全局域名的常见设置。

vim /etc/hosts

#新增域名 格式你的云服务器ip+本地环境的域名。后续填写域名即可
#本地就用127.0.0.1
117.111.111.111 janusserver.com

3.1.3修改nginx配置文件

janus服务器程序文件夹在/opt/janus/

基于nginx配置文件重定向至 /opt/janus/share/janus/demos

# HTTPS serverserver {listen       443 ssl;server_name  localhost;# 配置相应的keyssl_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;location / {# 指向janus demo所在目录root   /opt/janus/share/janus/demos;index  index.html index.htm;}}

启动nginx

sudo /usr/local/nginx/sbin/nginx

然后通过访问 https://127.0.0.1/ 。可以看到界面,但此时还不能正常通话。

3.1.4 安装和启动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 installsudo nohup turnserver -L 0.0.0.0 --min-port 50000 --max-port 60000  -a -u 用户名:密码-v -f -r nort.gov &

3.2 janus 配置文件之Video room功能

janus配置

janus安装目录在/opt/janus。文件结构:

./bin

./etc

./include

./lib

./share

可执行文件

janus配置文件

janus头文件

janus库

存放脚本或者文档,web demo也在这里

需要配置的文件为(目录/opt/janus/etc/janus)先备份。先把.sample后缀的文件拷贝成jcfg后缀

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

3.2.1 配置janus.jcfg

#大约202行左右,设置udp端口范围。
rtp_port_range = "50000-60000"
# 237行
stun_server = janusserver.comstun_port = 3478nice_debug = false
# 大概267行 填写云服务器外网ip地址
nat_1_1_mapping = janusserver.com#打洞服务器配置大概274行
# credentials to authenticate...turn_server = janusserver.comturn_port = 3478turn_type = "udp"turn_user = 用户名turn_pwd = 密码
rtp_port_range = "50000-60000"

3.2.2 配置janus.transport.http.jcfg

general: {json = "indented"                              base_path = "/janus"                    threads = "unlimited"                  http = true                                            port = 8088                                           https = true                                   secure_port = 8089                             
}certificates: {cert_pem = "/root/cert/cert.pem"cert_key = "/root/cert/key.pem"#cert_pwd = "secretpassphrase"#ciphers = "PFS:-VERS-TLS1.0:-VERS-TLS1.1:-3DES-CBC:-ARCFOUR-128"
}

3.2.3 配置janus.transport.websockets.jcfg 

general: {json = "indented"                             ws = true                                             ws_port = 8188                                 wss = true                                             wss_port = 8989                       
}
certificates: {cert_pem = "/root/cert/cert.pem"cert_key = "/root/cert/key.pem"#cert_pwd = "secretpassphrase"#ciphers = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256"
}

3.3 修改.js文件,指定wss协议

/opt/janus/share/janus/demos/videoroomtest.js

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

3.4 配置coturn地址

本地测试无需打洞,部署云服务且使用打洞才需要这一步。

/opt/janus/share/janus/demos/videoroomtest.js

这里要写你的服务器ip,使用本地域名方式解析不出来

#83行添加server: server,iceServers :[{urls: ["turn:127.0.0.1(这里要写你的服务器ip,使用域名解析不出来):3478?transport=udp","turn:127.0.0.1(同理):3478?transport=tcp"      ],username: "jbj",credential: "123456"},{urls: ["stun:127.0.0.1:3478"]}],success: function() 

3.5 运行

涉及服务启动有点多,在这里进行总结。

#nginx启动
sudo /usr/local/nginx/sbin/nginx  
#启动coturn
sudo nohup turnserver -L 0.0.0.0 --min-port 50000 --max-port 60000  -a -u 用户名:123456 -v -f -r nort.gov &
#jauns运行
/opt/janus/bin/janus --debug-level=5 --log-file=$HOME/janus-log

访问

https://IP/
或者
https://IP/videoroomtest.html

4.效果 

学习资料分享

0voice · GitHub

http://www.xdnf.cn/news/263557.html

相关文章:

  • Spring MVC入门
  • 第12章:精神力的禁忌边界
  • 强化学习--3.值函数的方法(贝尔曼方程)
  • 直播推流拉流Token验证流程(直播服务器:SRS,验证服务器:EGGS(nodejs))
  • 智能决策支持系统的系统结构:四库架构与融合范式
  • k8s笔记——kubebuilder工作流程
  • 嵌入式硬件篇---STM32F103C8T6STM32F103RCT6
  • Flink 的状态机制
  • Qt中实现工厂模式
  • 音视频开源项目列表
  • 【2025年】MySQL面试题总结
  • 实战探讨:为什么 Redis Zset 选择跳表?
  • xLua笔记
  • 55.[前端开发-前端工程化]Day02-包管理工具npm等
  • Oracle 11g通过dg4odbc配置dblink连接神通数据库
  • Oracle RAC ‘Metrics Global Cache Blocks Lost‘告警解决处理
  • 小程序滚动条隐藏(uniapp版本)
  • 【Java学习】通配符?
  • Java多语言DApp质押挖矿盗U源码(前端UniApp纯源码+后端Java)
  • 使用 Selenium 爬取动态网页数据 —— 实战与坑点详解
  • 基于LangChain 实现 Advanced RAG-后检索优化(下)-上下文压缩与过滤
  • 将Airtable导入NocoDB
  • 多协议 Tracker 系统架构与传感融合实战 第六章 多传感器时钟同步与数据对齐
  • SETNX的存在问题和redisson进行改进的原理
  • 【RAG】向量?知识库的底层原理:向量数据库の技术鉴赏 | HNSW(导航小世界)、LSH、K-means
  • 【Hive入门】Hive与Spark SQL深度集成:执行引擎性能全面对比与调优分析
  • C语言蓝桥杯真题代码
  • Go反射-通过反射调用结构体的方法(带入参)
  • 解决奥壹oelove婚恋原生小程序上架问题,彻底解决解对问题增强版旗舰版通用
  • 计算机网络八股文--day4 --传输层TCP与UDP