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

WebRTC-SFU服务器-Janus部署【保姆级部署教程】

一、SFU

WebRTC SFU(Selective Forwarding Unit)构架是一种通过服务器来路由和转发WebRTC客户端音视频数据流的方法。这种构架的核心特点是将服务器模拟成一个WebRTC的Peer客户端,从而实现了音视频流的直接转发。

在SFU构架中,服务器作为中心节点,但并不负责音视频流的混合处理,而是直接将其从一个客户端转发到其他客户端。这种构架的优点在于,由于数据包是直接转发,不需要进行编码、解码等复杂处理,因此对CPU、内存等机器资源的消耗较小。同时,直接转发音视频流也大大降低了延迟,提高了实时性。

SFU构架的另一个特点是具有灵活性,能够更好地适应不同的网络状况和终端类型。此外,由于服务器只负责转发,不做太重的处理,所以服务器的压力会相对较低,配置要求也不高。

在WebRTC中,SFU构架与MCU(MultiPoint Control Unit)和Mesh构架有所不同。MCU是一种传统的中心化构架,负责所有的视频编码、转码、解码、混合等复杂逻辑,每个客户端只需与MCU服务器建立连接即可。而Mesh构架则是每个客户端都与其他客户端建立连接,形成网状结构。相比之下,SFU构架更加轻量级,适合在大规模场合中使用,具有更好的伸缩性。

这里我直接怼一个Mesh、MCU、SFU的构架图,不同构架优缺点不多言。

在这里插入图片描述

二、Ubuntu安装Janus

Janus官方文档:https://janus.conf.meetecho.com/

Janus github:https://github.com/meetecho/janus-gateway

2.1安装依赖

  • GLib
sudo apt-get update
sudo apt-get install libglib2.0-dev
pkg-config --modversion glib-2.0 //查看版本
  • zlib
sudo apt install zlib1g zlib1g-dev
dpkg -l | grep zlib
  • pkg-config
sudo apt install pkg-config
pkg-config --version
  • Jansson
Jansson库可能并未直接包含在Ubuntu的软件库中,因此你可能需要从源代码编译安装。以下是从源代码编译安装的步骤: 
a. 下载Jansson源码:
git clone https://github.com/akheron/janssonb. 安装依赖:
在编译Jansson之前,你可能需要安装一些依赖库。你可以尝试以下命令(这些依赖可能会随着Jansson的版本而变化):
sudo apt install autoconf libtool
c. 编译和安装Jansson:
进入下载的Jansson源码目录,并运行以下命令进行编译和安装:
cd jansson  
autoreconf -i  # 反解析configure.ac文件,生成编译工具  
./configure  
make  
sudo make install
  • libconfig
a.下载源码文件
b.解压
tar -zxvf libconfig-x.y.z.tar.gz
c.配置编译选项
如果你需要更改默认的编译选项或安装位置,可以使用./configure脚本进行配置。例如,如果你想将libconfig安装到/usr/local目录(这是默认位置),可以运行:
cd libconfig-x.y.z
./configure --prefix=/usr/local
如果你不需要更改任何配置,可以直接运行./configure。
d.编译安装
make
make install
  • libnice (建议至少使用v0.1.16,推荐使用v0.1.18)
libnice 是一个用于实现 ICE(交互式连接建立)协议的库,它是 Janus 的一个重要依赖项。以下是在 Ubuntu 上安装 libnice 的步骤:
1. 安装依赖项
首先,你需要安装一些依赖项:
sudo apt update
sudo apt install python3-pip meson ninja //ninja需要单独安装
2. 下载和编译 libnice
从 GitLab 上克隆 libnice 代码库:git clone https://gitlab.freedesktop.org/libnice/libnice.gitcd libnice
编译 libnice:meson --prefix=/usr buildninja -C buildsudo ninja -C build install
3. 验证安装**
运行以下命令检查 libnice 是否已成功安装:pkg-config --cflags --libs nice
如果你看到 libnice 的编译选项和链接库,则安装成功。
**注意:**
* 以上步骤适用于 Ubuntu 18.04 及更高版本。
* 如果你使用的是其他版本的 Ubuntu,可能需要调整一些步骤。
* 请确保你拥有足够的权限来执行这些命令。
git clone https://gitlab.freedesktop.org/libnice/libnice
cd libnice
meson --prefix=/usr build && ninja -C build && sudo ninja -C build install
  • ninja
sudo apt update
sudo apt install ninja-build
  • OpenSSL (至少v1.0.1e)
apt install openssl
openssl version
  • libsrtp (建议至少v2.x)
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
pkg-config --modversion libsrtp2 //查看版本
Janus配置脚本自动检测您安装了哪个库,并自动链接到正确的库,如果两者都安装了则选择2.x。如果您希望选择1.5或1.6(不推荐),请在配置Janus时传递——disable-libsrtp2以强制它使用旧版本。
如果你手动编译安装了 libsrtp,则需要在编译 Janus 时使用 --with-libsrtp 选项指定 libsrtp 的安装路径。
例如,如果你将 libsrtp 安装到 /usr/local 目录,则编译 Janus 时可以使用以下命令:
./configure --with-libsrtp2=/usr/ --enable-srtp
make
sudo make install
这里不指定,在后面J

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Simulate Ring Resonator in INTERCONNECT
  • Codeforces Round 821 (Div. 2) C. Parity Shuffle Sorting (构造之全变成一样的)
  • 好用的c++11语言特性
  • Python筑基之旅-文件(夹)和流
  • docker-compose 自动管理 数据库
  • 2024/05/25学习记录
  • 20240526每日后端---------分享一些开发必备网站
  • docker安装Elasticsearch(ES)详细教程
  • 2024电工杯参赛经历感受总结
  • PyTorch深度学习实战(44)——基于 DETR 的目标检测模型
  • C++设计模式之单例模式、模板模式、状态模式、原型模式、CRTP 模式、组件模式、观察者模式、发布-订阅模式、访问者模式
  • three.js能实现啥效果?看过来,这里都是它的菜(10)
  • string OJ题
  • 【ai】pycharm安装langchain 相关module
  • 关于linux磁盘告警问题
  • ES6指北【2】—— 箭头函数
  • [case10]使用RSQL实现端到端的动态查询
  • 03Go 类型总结
  • 2017前端实习生面试总结
  • IOS评论框不贴底(ios12新bug)
  • JS实现简单的MVC模式开发小游戏
  • rc-form之最单纯情况
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • SQLServer插入数据
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 翻译:Hystrix - How To Use
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 京东美团研发面经
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 我建了一个叫Hello World的项目
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 一文看透浏览器架构
  • 怎么将电脑中的声音录制成WAV格式
  • scrapy中间件源码分析及常用中间件大全
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​secrets --- 生成管理密码的安全随机数​
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #QT 笔记一
  • %@ page import=%的用法
  • (06)金属布线——为半导体注入生命的连接
  • (9)目标检测_SSD的原理
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (C++17) std算法之执行策略 execution
  • (function(){})()的分步解析
  • (k8s中)docker netty OOM问题记录
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (pytorch进阶之路)扩散概率模型
  • (阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计