首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Janus WebRTC网关技术架构分享

Janus WebRTC网关技术架构分享

作者头像
杜金房
发布2026-07-27 13:23:23
发布2026-07-27 13:23:23
10
举报

Janus WebRTC网关

Janus是由Meetecho开发的通用WebRTC服务器,提供了一个用于构建 WebRTC 应用程序的模块化框架。本文档对 Janus WebRTC Gateway 的架构、核心组件及其交互方式进行了高层次概述。

主要特性:

  • 模块化架构:将核心 WebRTC 功能与特定于应用的逻辑分离。
  • 轻量级核心:使用 C 语言编写,占用资源小。
  • 插件系统:可通过插件扩展,适用于各种应用(视频会议、流媒体、SIP 网关-集成FreeSWITCH等开源SIP软交换)。
  • 多种传输机制:支持 HTTP/REST、WebSockets、RabbitMQ、MQTT、Nanomsg 和 Unix 套接字。
  • 会话管理:处理连接、WebRTC 会话和插件附加。
  • 媒体处理:处理媒体协商、编码和传输。
  • 录制功能:支持通过 .mjr 文件和后处理工具录制 WebRTC 会话。

概述

Janus 是由 Meetecho 开发的通用 WebRTC 服务器,提供了一个用于构建 WebRTC 应用程序的模块化框架。本文档提供了 Janus WebRTC 网关架构的高级概述、其核心组件以及它们之间的交互方式。

目的和范围

Janus WebRTC 网关设计目标为一个轻量级的通用 WebRTC 服务器,除了实现以下功能外,本身不提供任何其他功能:

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

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

主要特性

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

高级架构

Janus 系统架构

插件层

Janus 核心

传输层

客户端应用程序

Web 浏览器

移动应用程序

自定义客户端

libjanus_http.so

libjanus_websockets.so

libjanus_mqtt.so

libjanus_rabbitmq.so

libjanus_nanomsg.so

libjanus_unixsockets.so

janus_session

janus_ice_handle

WebRTC 栈(libnice, OpenSSL, libsrtp)

libjanus_videoroom.so

libjanus_audiobridge.so

libjanus_streaming.so

libjanus_sip.so

libjanus_echotest.so

libjanus_textroom.so

libjanus_recordplay.so

核心组件和流程

核心组件和交互流程

应用程序插件

Janus 核心逻辑

传输插件

JSON API

janus_transport

janus_session_find

janus_plugin_push_event

janus_ice_setup_connectivity

DTLS 握手

密钥交换

janus_plugin_incoming_rtp

janus_plugin_incoming_data

客户端应用程序

janus_transport_callbacks

janus_session

janus_ice_handle

libnice (ICE)

OpenSSL (DTLS)

libsrtp (SRTP)

usrsctp (数据通道)

janus_plugin_callbacks

会话和句柄关系

Janus 通过分层结构组织客户端连接:

  1. 1. 会话:表示从客户端到网关的连接。会话由唯一的 session_id 标识。
  2. 2. 句柄:在会话中,客户端创建句柄以附加到特定插件。句柄是特定应用程序用例的上下文(例如,特定的 VideoRoom)。
  3. 3. 对等连接:每个句柄管理自己的 WebRTC 对等连接,包括 ICE 代理、DTLS 状态和 SRTP 密钥。

这种架构允许单个客户端通过在单个会话中维护多个句柄来同时与多个插件交互。

会话生命周期

Janus 会话的典型生命周期包括:

  1. 1. 会话创建:客户端通过传输连接并发送 create 请求。
  2. 2. 插件附加:客户端发送 attach 请求指定插件(例如 janus.plugin.videoroom)。
  3. 3. 媒体协商:客户端和插件通过核心交换 JSEP(JavaScript 会话建立协议)消息(SDP 提供/应答)。
  4. 4. 媒体交换:一旦对等连接建立,RTP/RTCP 或数据通道数据包开始流动。
  5. 5. 会话终止:句柄被分离,会话通过 destroy 请求或超时被销毁。

媒体交换期间的数据流

"媒体栈 (libnice/libsrtp)""插件 (例如 libjanus_videoroom.so)""Janus 核心 (janus.c)""传输 (例如 libjanus_websockets.so)""WebRTC 客户端""媒体栈 (libnice/libsrtp)""插件 (例如 libjanus_videoroom.so)""Janus 核心 (janus.c)""传输 (例如 libjanus_websockets.so)""WebRTC 客户端"ICE/DTLS 连接已建立创建会话janus_session_create()session_id附加插件janus_ice_handle_create()init() / create_handle()handle_idSDP 提供 (JSEP)janus_ice_handle_process_jsep()handle_message()janus_plugin_push_event(SDP 应答)nice_agent_gather_candidates()发送应答SDP 应答加密的 RTP解密 (SRTP)incoming_rtp()中继/处理relay_rtp()加密 (SRTP)加密的 RTP

插件系统

Janus 提供了一个插件架构,允许开发人员在不修改核心的情况下实现各种 WebRTC 应用程序。插件是在运行时加载的共享对象。其包含的核心插件:

  • VideoRoom:用于视频会议的 SFU(选择性转发单元)
  • AudioBridge:用于会议的音频混音器
  • Streaming:允许向 WebRTC 客户端广播 RTP/RTSP/HLS 流
  • SIP:到传统 SIP/VoIP 网络的网关,对接FreeSWITCH 模块
  • TextRoom:基于数据通道的聊天
  • Lua/Duktape:允许用脚本语言编写插件逻辑

传输层

传输层是可插拔的,允许通过各种协议控制 Janus:

  • HTTP/REST:Web 集成的默认选项(libmicrohttpd
  • WebSockets:双向低延迟控制(libwebsockets
  • 消息队列:通过 RabbitMQ 或 MQTT 与后端系统集成
  • Unix 套接字:高性能本地控制

结论

Janus WebRTC网关通过其模块化架构为构建 WebRTC 应用程序提供了灵活的框架。通过将 WebRTC 功能(核心)与应用程序逻辑(插件)和通信机制(传输)分离,Janus使开发人员能够专注于构建其特定应用程序,而无需处理底层WebRTC栈的复杂性。

参考资料:

https://www.januscon.it/2019/slides/LucaPradovera-JanusCon.pdf

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeSWITCH中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Janus WebRTC网关
  • 概述
    • 目的和范围
    • 主要特性
    • 高级架构
      • Janus 系统架构
    • 核心组件和流程
      • 核心组件和交互流程
      • 会话和句柄关系
    • 会话生命周期
      • 媒体交换期间的数据流
    • 插件系统
    • 传输层
    • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档