CallKit 架构文档
大约 3 分钟
Web 集成文档
CallKit 架构文档
项目概述
环信 Web CallKit 是一款功能完善的音视频通话组件库,支持一对一通话、群组通话等多种通话场景。该组件库采用清晰的架构分层、完善的类型定义以及灵活的配置机制,为开发者提供强大且易用的通话功能。凭借模块化设计,各组件具备优秀的可维护性和扩展性,结合灵活的布局系统、完整的通话状态管理以及丰富的用户交互功能,该组件库可全面适配各类复杂通话需求。
项目结构
module/callkit/
├── CallKit.tsx                 # 主组件,核心逻辑入口
├── components/                 # UI 组件目录
│   ├── VideoPlayer.tsx        # 视频播放器组件
│   ├── InvitationContent.tsx  # 邀请内容组件
│   └── ...
├── layouts/                    # 布局系统目录
│   ├── FullLayoutManager.tsx  # 完整布局管理器
│   ├── OneToOneFullLayout.tsx # 一对一通话布局
│   ├── MultiPartyFullLayout.tsx # 多人通话布局
│   └── PreviewFullLayout.tsx  # 预览模式布局
├── services/                   # 服务层目录
│   ├── CallService.ts         # 通话服务核心类
│   ├── CallError.ts           # 错误处理类
│   └── ...
├── hooks/                      # 自定义 Hook 目录
│   ├── useCallTimer.ts        # 通话计时器 Hook
│   ├── useInvitationTimers.ts # 邀请定时器 Hook
│   ├── useContainerSize.ts    # 容器尺寸 Hook
│   ├── useFullscreen.ts       # 全屏控制 Hook
│   ├── useResizable.ts        # 尺寸调整 Hook
│   └── useDraggable.ts        # 拖拽控制 Hook
├── types/                      # 类型定义目录
│   ├── index.ts               # 主要类型定义
│   ├── layout.ts              # 布局相关类型
│   └── ...
└── styles/                     # 样式文件目录
    └── index.scss             # 主样式文件
核心架构组件
各组件之间的关系如下图所示:
核心服务层
| 组件 | 描述 | 
|---|---|
| CallService Class | - 负责管理通话的核心逻辑。  - 处理音视频流的创建、管理和销毁。 - 管理通话状态转换。 - 与 Web IM 和 Agora RTC 进行交互。  | 
| CallServiceConfig | - 配置 CallService 的各种参数。 - 包含回调函数、连接信息等配置项。  | 
| CallInfo Interface | - 定义通话信息的标准格式。  - 包含通话 ID、类型、参与者等关键信息。  | 
CallKit 组件层
| 组件 | 描述 | 
|---|---|
| CallKit forwardRef | - 主要的 React 组件入口。  - 管理组件的整体状态和生命周期。 - 提供对外的方法接口。  | 
| 状态管理 | - videos: 管理所有视频窗口信息。 - callStatus: 管理通话状态。 - invitation: 管理邀请相关信息。 | 
布局系统
| 组件 | 描述 | 
|---|---|
| - FullLayoutManager - MemoizedFullLayoutManager  | - 统一的布局管理器,支持多种布局模式。  - 使用 React.memo 进行性能优化。 - 根据通话类型自动选择合适的布局。  | 
| 布局类型 | - OneToOneFullLayout: 一对一通话布局。 - MultiPartyFullLayout: 多人通话布局。 - PreviewFullLayout: 预览模式布局。 | 
UI 组件层
| 组件 | 描述 | 
|---|---|
| CallControls Component | - 通话控制按钮(静音、摄像头、扬声器等)。  - 支持自定义图标和样式。  | 
| VideoWindow Rendering | - 视频窗口渲染组件。  - 支持本地和远程视频流。 - 包含用户头像、昵称、状态指示器等。  | 
| UserSelect Component | - 用户选择组件,用于群组通话。  - 支持多选和搜索功能。  | 
功能与特性
| 功能/特性 | 描述 | 
|---|---|
| 通话类型支持 | - 一对一视频通话: 支持本地预览、远程视频显示。  - 一对一音频通话: 纯音频通话模式。 - 群组通话: 支持多人音视频通话。  | 
| 布局系统 | - 自适应布局: 根据参与者数量自动调整布局。  - 多种布局模式: 支持一对一、多人、预览等不同布局。 - 响应式设计: 支持窗口大小调整和拖拽。  | 
| 状态管理 | - 完整的状态机: idle → calling → ringing → connected。  - 实时状态同步: 与 CallService 保持状态一致。 - 错误处理: 完善的错误处理和恢复机制。  | 
| 用户交互 | - 控制按钮: 静音、摄像头、扬声器等。  - 拖拽和调整: 支持窗口拖拽和尺寸调整。 - 全屏和最小化: 支持全屏模式和最小化功能。  | 
| 通知系统 | - 邀请通知: 支持自定义邀请内容和样式  - 超时处理: 自动处理邀请超时。 - 多语言支持: 内置国际化支持。  | 
