Architecture - 架构
本节提供了 Jitsi 基础设施的全 局概览。如果你刚开始为该项目做贡献,我们强烈建议你仔细阅读本节内容。
组件
Jitsi 包含以下 项目 :
- Jitsi Meet - 一个兼容 WebRTC 的 JavaScript 应用程序,使用 Jitsi Videobridge 提供高质量、可扩展的视频会议。基于 React 和 React Native 构建。
- Jitsi Videobridge (JVB) - 兼容 WebRTC 的服务器,旨在充当会议参与者之间的视频流路由。
- Jitsi Conference Focus (jicofo) - Jitsi Meet 会议中的服务器端焦点组件,负责管理媒体会话,并作为参与者和 videobridge 之间的负载均衡器。
- Jitsi Gateway to SIP (jigasi) - 服务器端应用程序,允许常规 SIP 客户端加入 Jitsi Meet 会议。
- Jitsi Broadcasting Infrastructure (jibri) - 一组用于录制和/或直播 Jitsi Meet 会议的工具,通过启动一个在虚拟帧缓冲区中呈现的 Chrome 实例,并使用 ffmpeg 捕获和编码输出。
Jitsi 使用的外部软件:
- Prosody - 用于信令的 XMPP 服务器。
架构示意图
下图描述了之前提到的各个组件之间的具体连接关系,以及它们与外部系统的集成方式。
外部通讯可以分为两个主要组别。首先,客户端之间请求视频或音频连接的通讯是通过远程请求和数据流进行的。第二类外部通讯是与外部服务的连接,这些服务帮助存储录音、直播录音、流媒体视频或协助创建会议。
代码结构
在本节中,我们将查看代码库的主要部分,并了解它们的用途。
./react/features
此文件夹是编写代码的最佳起点,因为它包含 Android、iOS 和网页版本应用中使用的大部分组件。该源文件夹根据 Jitsi 提供的不同功能进行划分,例如身份验证、聊天交互、键盘快捷键、截图、远程控制和虚拟背景。每个功能都有一个对应的文件夹,并进一步细分,以保持代码的层次结构和一致性。
如前所述,代码库主要由 React 和 React Native 组成,后者是移动应用的 React 版本。大多数功能使用 React 的所谓类组件[^class-comp],不过一些新功能开始使用 hooks[^func-comp] 这一新的方式来编写功能组件。
该应用还使用 React Redux,作为一个通用状态存储,用于跟踪整个应用程序中使用的重要参数。有关 React Redux 的更多信息,请参见 [^react-redux]。
大多数功能还包含一个名为 middleware.js
的文件。该文件充当组件与应用程序其他功能之间的桥梁。
./modules/external-api