首页 > web前端 > js教程 > 正文

Janus WebRTC 服务器和 SFU:实时视频通话应用程序

Susan Sarandon
发布: 2024-11-02 16:55:29
原创
255 人浏览过

在本文中,我们将使用 Janus WebRTC 服务器和 SFU 创建一个视频通话应用程序

我们还将了解 Metered.ca SFU 以及为什么它是比 Janus Server 更好的选择

Janus是什么?

Janus 是一个开源、通用的 WebRTC SFU 服务器。它是一个模块化网关,通过处理复杂的 WebRTC 协议来促进实时通信应用程序,并为媒体交换提供稳定的服务器

Janus SFU 的主要特点

  • 模块化架构: Janus 有一个基于插件的系统,其中每个插件都有一些特定的功能。这种模块化允许定制和扩展

  • 协议处理:Janus 管理建立 webrtc 连接所需的信令和协商。

  • 互操作性: Janus 支持媒体编解码器,并兼容不同的客户端和浏览器,因此 Janus 具有广泛的兼容性

  • 可扩展性:Janus 旨在高效处理多个连接,可在特定地理区域内进行扩展。 (也就是说,如果所有使用 Janus 的用户都在一个小地理区域内,它就会正常工作)

了解SFU(选择性转发单元)

SFU 或选择性转发单元是一种媒体服务器架构,用于 WebRTC 应用程序中,以在不同媒体参与者之间有效路由媒体流

SFU 接收来自每个参与者的传入视频流,然后根据请求有选择地将流转发给其他参与者。

即每个参与者接收参与者请求的流,同时所有参与者将其流推送到 SFU

使用 SFU 高效路由媒体流的优势

  1. 可扩展性:SFU 可以处理大量连接,因为 SFU 不涉及编码和解码等计算密集型任务,而只是将流转发给用户

  2. 低延迟: SFU 转发流而不进行处理,从而实现低延迟。但如果您的用户遍布世界各地,您需要一个全球分布式 SFU 服务,例如 metered.ca cloud sou

  3. 带宽优化

    1. 联播支持:SFU 可以传输来自同一参与者的多个不同质量的流。客户可以选择传输最适合其设备和网络功能的不同质量,以实现流畅的视频/音频流
    2. 选择性订阅:客户端可以只订阅他们需要的流,从而减少不必要的带宽使用。
  4. 灵活性和控制:参与者对于他们想要接收的内容有更大的灵活性,例如,如果他们只想接收音频或接收选定参与者的视频流,那么他们可以选择这样做

  5. 成本效率:由于与 MCU 相比,SFU 需要更少的处理,云上较小的实例可以为您工作

  6. 保持媒体质量: SFU 保持媒体质量,因为它们不对媒体流进行任何处理,只是将流转发给请求的参与者。

  7. 更轻松地实现高级功能

    1. 动态布局客户端可以使用他们接收的视频流自定义自己的布局。而不是通过视频 sdk 和 api 获得的预先确定的布局
    2. 活动发言者检测: SFU 可以仅转发活动发言者的流,从而增强焦点并减少不必要的数据传输。
    3. 录制和流媒体: SFU 可以将媒体流转发到录制服务或广播平台,而不影响设备和用户之间的任何通信
  8. 提高可靠性:服务器上无需处理媒体,因此故障点更少。 SFU 还可以集群化以实现冗余,从而确保即使一台服务器遇到任何问题,服务仍然可用。


Janus WebRTC server and SFU: a real time video calling app

在您的应用程序中实现 Janus

将 Janus SFU 集成到您的应用程序中涉及以下步骤。以下是在您的应用程序中实施 Janus 的分步过程。

第 1 步:设置 Janus 服务器

  1. 系统准备

    1. 服务器准备:确保您有正在运行的 Ubuntu 或 Debian 服务器。
    2. 安装依赖项:Janus 需要类似的库
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
登录后复制
登录后复制
登录后复制
登录后复制

您可以轻松地在 ubuntu 或 Debian 上安装这些依赖项

apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
登录后复制
登录后复制
登录后复制

下载并构建 Janus

  • 克隆存储库
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
登录后复制
登录后复制
登录后复制
登录后复制
  • 导航到目录
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
登录后复制
登录后复制
登录后复制
  • 生成配置脚本
git clone https://github.com/meetecho/janus-gateway.git
登录后复制
  • 配置构建
cd janus-gateway
登录后复制
  • 编译并安装
sh autogen.sh
登录后复制
  1. 配置 Janus

    1. 编辑配置文件

      1. 该文件位于/opt/janus/etc/janus/
      2. 重要文件包括 janus.cfg 、 janus.transport.websockets.cfg 和 janus.plugin.videoroom.cfg
    2. 启用所需的插件

      1. 确保启用视频室插件才能使用 SFU
      2. 如果您想在应用程序中使用 WebSocket 传输来发送信号,您还可以配置 WebSockets 传输
  2. 设置 SSL 证书

    1. 生成 SSL 证书

      1. 如果您想使用安全连接,可以使用 Lets Encrypt 生成自签名证书。如果您想使用安全连接,这是一个可选步骤
    2. 更新配置

      1. 将配置文件指向SSL证书
  3. 启动 Janus 服务器

    1. 运行剑锋
./configure --prefix=/opt/janus
登录后复制
  1. 验证操作

    1. 检查日志以查看一切都在运行,没有任何错误。

第 2 步开发客户端应用程序

  1. 设置开发环境

    1. 选择前端框架

      1. 您可以选择 React、Angular 或任何其他前端框架
    2. 包含 WebRTC 库

      1. 您还可以使用像adapter.js这样的WebRTC辅助库来兼容不同的浏览器
  2. 建立信令服务器

    1. 通过 Websockets 连接到 Janus
    2. 实现握手以创建新会话,然后附加视频室插件
  3. 创建或加入视频室

    1. 向 Janus 服务器发送请求以创建新房间或加入服务器上的现有房间
  4. 处理本地媒体流

    1. 如果您愿意,可以向用户显示本地媒体流,我们还将在下面的后面部分中显示远程流
make
sudo make install
sudo make configs
登录后复制

将本地流附加到 HTML 中的视频元素以向用户播放流

5.发布到 Janus

  • 使用 RTCPeerConnection 创建 SDP 报价

  • 使用 API 将报价发送给 Janus

  • 接收来自Janus的SDP应答并将其设置为远程描述

6.订阅远程流

  • 处理加入消息和活动消息以收听其他会议参与者的通知

  • 为订阅者创建对等连接,即为每个远程参与者创建一个新的 RTCPeerConnection

  • 处理远程流,获取远程流并将其附加到 HTML 视频元素以在用户 Web 浏览器上播放视频

  1. 实现事件监听器和处理程序

    1. 监视 oniceconnectionstatechange 和 onicecandidate 等事件,并在这些事件发生时进行处理,并在需要时实现重新连接逻辑

探索 Metered.ca SFU 作为 Janus 的替代品

什么是计量全球云 SFU

  1. Metered Global Cloud SFU 是 Metered.ca 推出的基于云的选择性转发单元

  2. 借助 Metered SFU,开发人员可以构建任何类型的应用程序,包括视频、音频和数据传输

  3. 计量 SFU 使用本机 WebRTC API 和 HTTP 运行,无需任何专有 SDK。

  4. 用户还会根据地理位置自动路由到最近的 SFU

  5. 多个 SFU 使用高速互连在全球范围内相互连接,确保尽可能低的延迟

计量全局 SFU 的主要功能

  • 全球分布:

    • 用户根据地理位置连接到封闭的SFU,因此具有最低的延迟和高性能
  • 平台独立性

    • 无需任何专有 SDK,从而使您能够使用 WebRTC 自己的 API 跨不同平台进行开发
  • 灵活的发布订阅模型:

    • 可容纳无限参与者和不同的会议结构。
  • 可扩展性

    • 您可以与数千名用户举行小型会议以及大型直播会议
  • 成本效率:

    • 根据数据传输速率收费,为高使用场景提供显着节省
    • 此外,还提供按使用付费的计费方式。

计量 SFU 的工作原理

连接流程

  1. 建立连接

    1. 创建对等连接
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
登录后复制
登录后复制
登录后复制
登录后复制

b.发送本地 SDP 报价

  • 生成 SDP 报价,然后使用 HTTP API 请求将其发送到 Metered.ca SFU。

c.接收SFU远程SDP

  • 将收到的SDP设置为peerConnection上的远程描述

d.连接已建立

  • 添加媒体轨道
GLib
zlib
pkg-config
Jansson
libconfig
libnice (at least v0.1.16 suggested, v0.1.18 recommended)
OpenSSL (at least v1.0.1e)
libsrtp (at least v2.x suggested)
登录后复制
登录后复制
登录后复制
登录后复制
  1. 发布曲目

    1. 添加媒体轨道
apt install libmicrohttpd-dev libjansson-dev \
    libssl-dev libsofia-sip-ua-dev libglib2.0-dev \
    libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
    libconfig-dev pkg-config libtool automake
登录后复制
登录后复制
登录后复制

b.生成并发送 SDP 报价

  • 将更新的 SDP 报价发送给 SFU

  • 接收并设置 SFU 对 SDP 的响应

  1. 订阅曲目

      1. 向 SFU 请求曲目订阅

        1. 使用所需流的trackid和remoteTrackSessionId将请求发送到SFU。
      1. 在你的peerConnection上设置接收到的SDP
      2. 处理传入媒体和 ontrack 事件以向用户显示传入流

计量 SFU 相对于 Janus 的优势

  1. 可扩展性

    1. 媒体分布

      1. 客户端将所有媒体流发送到SFU一次,无论有多少参与者
      2. 然后,SFU 管理流向所有请求特定流的订阅者的分发
    2. 大规模流媒体

      1. 计量 SFU 支持小型会议以及向数千名用户进行的大规模直播
  2. 平台独立性

    1. 无需专有 SDK
    2. 降低复杂性
  3. 灵活的发布订阅模式

    1. 无房间限制:计量 SFU 在会话上运行,而不是在预定义的房间上运行。
    2. 会话可以发布和订阅流,参与者数量没有限制。
    3. 动态和可扩展设计:最适合可扩展设计,例如直播。
  4. 成本效率

    1. 计量 SFU 具有成本效益,因为我们根据每 GB 传输的数据而不是按分钟计费
    2. 仅出站数据收费,SFU 的入站数据免费,这在监控等应用中特别具有成本效益,这些应用程序会不断上传到 SFU 但不经常查看
  5. 全球SFU网络:

    1. 计量 SFU 具有全球影响力,SFU 遍布五大洲
    2. 媒体流通过高速互连 SFU 链路进行路由
    3. 这使得来自世界不同地区的用户能够体验低延迟通信

计量 SFU 与 Janus 的比较

  1. 部署和维护

    1. 计量 SFU:

      1. 基于云的托管服务基础设施
      2. 减轻运营和维护责任,使开发人员能够专注于应用程序功能
    2. 两面神

      1. 需要自托管、服务器设置和持续维护,而且它不是完全免费的,因为您必须支付云服务器费用
      2. 需要管理更新、扩展和安全补丁
  2. 可扩展性和性能

    1. 计量 SFU

      1. 自动扩展并可以处理任意数量的参与者
      2. 通过遍布各个地理位置的 SFU,世界各地的参与者都可以体验到低延迟和高性能
    2. 两面神

      1. 不可全局扩展,取决于您分配的服务器资源
      2. 需要复杂的设置,例如针对高负载用例的集群
  3. 成本结构

    1. 计量 SFU

      1. 按 GB 进行数据传输计费,这更便宜,而且按需付费
      2. 对于需要高数据使用量的应用程序来说更具可预测性且成本更低
    2. 两面神

      1. 虽然开源,但使用 Janus 会产生运营成本,包括服务器托管和维护
      2. 随着扩展和高使用率,成本会显着增加
  4. 灵活性和功能

    1. 计量 SFU

      1. 灵活且可扩展的发布和订阅模型
      2. 使用标准 WebRTC API 简化开发并支持无限参与
    2. 两面神

      1. 提供基于插件的架构,具有视频室流媒体等功能
      2. 需要针对特定​​用例进行配置和潜在的定制
  5. 易于集成

    1. 计量 SFU

      1. 使用标准 WebRTC API 简化开发流程
      2. 缩短上市时间,需要考虑基础设施设置、服务器要求等

Janus WebRTC server and SFU: a real time video calling app

计量 TURN 服务器

  1. API: 使用强大的 API 进行 TURN 服务器管理。您可以执行以下操作:通过 API 添加/删除凭据、通过 API 检索每个用户/凭据和用户指标、通过 API 启用/禁用凭据、通过 API 按日期检索使用数据。

  2. 全球地理位置定位:自动将流量定向到最近的服务器,以实现尽可能低的延迟和最高的质量性能。全球任何地方的延迟均低于 50 毫秒

  3. 全球所有地区的服务器:多伦多、迈阿密、旧金山、阿姆斯特丹、伦敦、法兰克福、班加罗尔、新加坡、悉尼、首尔、达拉斯、纽约

  4. 低延迟: 低于 50 毫秒的延迟,在世界任何地方。

  5. 经济高效:即用即付定价,并提供带宽和批量折扣。

  6. 轻松管理: 获取使用日志、帐户达到阈值限制时的电子邮件、账单记录以及电子邮件和电话支持。

  7. 符合标准: 符合基于 UDP、TCP、TLS 和 DTLS 的 RFC 5389、5769、5780、5766、6062、6156、5245、5768、6336、6544、5928。

  8. 多租户: 创建多个凭据并按客户或不同应用分开使用。获取使用日志、计费记录和阈值警报。

  9. 企业可靠性: SLA 正​​常运行时间达 99.999%。

  10. 企业规模: 不限制并发流量或总流量。计量 TURN 服务器提供企业可扩展性

  11. 每月 5 GB 免费: 通过免费计划每月获得 5 GB 免费 TURN 服务器使用量

  12. 在端口 80 和 443 上运行

  13. 支持 TURNS SSL 以允许通过深度数据包检测防火墙进行连接。

  14. 同时支持 TCP 和 UDP

  15. 免费无限制 STUN

以上是Janus WebRTC 服务器和 SFU:实时视频通话应用程序的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!