

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

主要特性:
Janus 是由 Meetecho 开发的通用 WebRTC 服务器,提供了一个用于构建 WebRTC 应用程序的模块化框架。本文档提供了 Janus WebRTC 网关架构的高级概述、其核心组件以及它们之间的交互方式。
Janus WebRTC 网关设计目标为一个轻量级的通用 WebRTC 服务器,除了实现以下功能外,本身不提供任何其他功能:
实际功能是在服务器端插件中实现的,浏览器通过 Janus 核心连接到这些插件。这种模块化架构允许占用很小的空间,同时提供最大的灵活性。
.mjr 文件录制 WebRTC 会话和后处理工具插件层
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 通过分层结构组织客户端连接:
session_id 标识。这种架构允许单个客户端通过在单个会话中维护多个句柄来同时与多个插件交互。
Janus 会话的典型生命周期包括:
create 请求。attach 请求指定插件(例如 janus.plugin.videoroom)。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 应用程序。插件是在运行时加载的共享对象。其包含的核心插件:

传输层是可插拔的,允许通过各种协议控制 Janus:
libmicrohttpd)libwebsockets)Janus WebRTC网关通过其模块化架构为构建 WebRTC 应用程序提供了灵活的框架。通过将 WebRTC 功能(核心)与应用程序逻辑(插件)和通信机制(传输)分离,Janus使开发人员能够专注于构建其特定应用程序,而无需处理底层WebRTC栈的复杂性。
参考资料:
https://www.januscon.it/2019/slides/LucaPradovera-JanusCon.pdf
本文分享自 FreeSWITCH中文社区 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!