CI/CD / Build Frontend (push) Failing after 11s
CI/CD / Test (macos-latest) (push) Has been cancelled
CI/CD / Test (windows-latest) (push) Has been cancelled
CI/CD / Build Desktop (linux) (push) Has been cancelled
CI/CD / Build Desktop (macos) (push) Has been cancelled
CI/CD / Build Desktop (windows) (push) Has been cancelled
CI/CD / Release (push) Has been cancelled
CI/CD / Test (ubuntu-latest) (push) Failing after 2s
- tscore: Protocol implementation (packets, crypto, connection handshake) - tsaudio: Audio engine (capture, playback, codec, VAD, jitter buffer) - tsdb: SQLite database (identities, bookmarks, messages, settings) - shared: Core types and events - tauri-app: Tauri v2 desktop application with React frontend - docs: SRS, SAD, SDD documentation - CI/CD: GitHub Actions workflow - 32 unit tests passing
573 lines
12 KiB
Markdown
573 lines
12 KiB
Markdown
# 需求分析文档 (SRS)
|
|
|
|
## 1. 概述
|
|
|
|
本文档定义 TeamSpeak 3 客户端系统的功能需求和非功能需求,基于对参考代码库的分析和 TeamSpeak 3 协议规范。
|
|
|
|
## 2. 系统目标
|
|
|
|
### 2.1 主要目标
|
|
1. 实现一个功能完整的 TeamSpeak 3 客户端
|
|
2. 支持跨平台运行 (Windows, Linux, macOS, Android, Web)
|
|
3. 提供现代化的用户界面
|
|
4. 保持与官方 TeamSpeak 服务器的兼容性
|
|
5. 支持音频通信和文本聊天
|
|
|
|
### 2.2 次要目标
|
|
1. 支持插件扩展机制
|
|
2. 提供统计和分析功能
|
|
3. 支持多服务器同时连接
|
|
4. 提供机器人开发框架
|
|
|
|
## 3. 功能需求
|
|
|
|
### 3.1 连接管理
|
|
|
|
#### FR-3.1.1 服务器连接
|
|
**描述**: 用户能够连接到 TeamSpeak 3 服务器
|
|
|
|
**需求**:
|
|
- 支持通过 IP 地址连接
|
|
- 支持通过域名连接
|
|
- 支持通过服务器昵称连接
|
|
- 支持 DNS SRV 和 TSDNS 解析
|
|
- 支持服务器密码验证
|
|
- 支持身份选择和管理
|
|
- 支持默认频道设置
|
|
- 支持频道密码
|
|
|
|
**输入**:
|
|
- 服务器地址 (IP/域名/昵称)
|
|
- 服务器密码 (可选)
|
|
- 身份 (可选)
|
|
- 昵称
|
|
- 默认频道 (可选)
|
|
- 频道密码 (可选)
|
|
|
|
**输出**:
|
|
- 连接成功/失败状态
|
|
- 服务器信息
|
|
- 客户端 ID
|
|
|
|
#### FR-3.1.2 连接状态管理
|
|
**描述**: 管理连接的生命周期状态
|
|
|
|
**状态**:
|
|
- Uninitialized: 未初始化
|
|
- Connecting: 连接中
|
|
- IdentityLevelIncreasing: 身份等级提升中
|
|
- Connected: 已连接
|
|
- ChannelListFinished: 频道列表接收完成
|
|
- DisconnectedTemporarily: 临时断开
|
|
- Disconnected: 已断开
|
|
- Error: 错误
|
|
|
|
**需求**:
|
|
- 状态转换应有明确的触发条件
|
|
- 状态变化应通知前端
|
|
- 支持自动重连(临时断开时)
|
|
- 支持手动断开连接
|
|
|
|
#### FR-3.1.3 多服务器连接
|
|
**描述**: 支持同时连接多个 TeamSpeak 服务器
|
|
|
|
**需求**:
|
|
- 每个连接独立管理
|
|
- 连接间互不影响
|
|
- 支持连接切换
|
|
- 支持连接列表管理
|
|
|
|
### 3.2 频道管理
|
|
|
|
#### FR-3.2.1 频道浏览
|
|
**描述**: 浏览服务器的频道结构
|
|
|
|
**需求**:
|
|
- 显示频道树状结构
|
|
- 显示频道名称、主题、编解码器
|
|
- 显示频道最大客户端数
|
|
- 显示频道类型(永久/半永久/临时)
|
|
- 显示频道密码状态
|
|
- 支持频道搜索
|
|
|
|
#### FR-3.2.2 频道操作
|
|
**描述**: 执行频道相关操作
|
|
|
|
**需求**:
|
|
- 加入频道
|
|
- 离开频道
|
|
- 创建频道(需要权限)
|
|
- 编辑频道(需要权限)
|
|
- 删除频道(需要权限)
|
|
- 移动频道(需要权限)
|
|
- 设置频道密码
|
|
- 设置频道排序
|
|
|
|
#### FR-3.2.3 频道订阅
|
|
**描述**: 订阅频道以接收通知
|
|
|
|
**需求**:
|
|
- 订阅频道
|
|
- 取消订阅频道
|
|
- 接收频道事件通知
|
|
- 显示订阅状态
|
|
|
|
### 3.3 客户端管理
|
|
|
|
#### FR-3.3.1 客户端列表
|
|
**描述**: 显示在线客户端列表
|
|
|
|
**需求**:
|
|
- 显示客户端昵称
|
|
- 显示客户端状态(离开/录音/静音等)
|
|
- 显示客户端所在频道
|
|
- 显示客户端服务器组
|
|
- 显示客户端频道组
|
|
- 支持客户端搜索
|
|
|
|
#### FR-3.3.2 客户端操作
|
|
**描述**: 执行客户端相关操作
|
|
|
|
**需求**:
|
|
- 发送私聊消息
|
|
- 发送戳一戳
|
|
- 移动客户端(需要权限)
|
|
- 踢出客户端(需要权限)
|
|
- 封禁客户端(需要权限)
|
|
- 设置客户端音量
|
|
- 设置客户端静音
|
|
|
|
#### FR-3.3.3 客户端信息
|
|
**描述**: 查看客户端详细信息
|
|
|
|
**需求**:
|
|
- 显示客户端唯一标识符
|
|
- 显示客户端数据库 ID
|
|
- 显示客户端版本信息
|
|
- 显示客户端平台
|
|
- 显示客户端连接信息
|
|
- 显示客户端权限
|
|
|
|
### 3.4 文本聊天
|
|
|
|
#### FR-3.4.1 消息发送
|
|
**描述**: 发送文本消息
|
|
|
|
**需求**:
|
|
- 发送服务器消息
|
|
- 发送频道消息
|
|
- 发送私聊消息
|
|
- 支持 BBCode 格式
|
|
- 支持消息历史
|
|
- 支持消息撤回(如果服务器支持)
|
|
|
|
#### FR-3.4.2 消息接收
|
|
**描述**: 接收和显示文本消息
|
|
|
|
**需求**:
|
|
- 显示服务器消息
|
|
- 显示频道消息
|
|
- 显示私聊消息
|
|
- 显示系统通知
|
|
- 支持消息通知
|
|
- 支持消息过滤
|
|
|
|
#### FR-3.4.3 消息存储
|
|
**描述**: 存储聊天历史
|
|
|
|
**需求**:
|
|
- 本地存储消息历史
|
|
- 支持消息搜索
|
|
- 支持消息导出
|
|
- 支持消息清理
|
|
|
|
### 3.5 音频通信
|
|
|
|
#### FR-3.5.1 音频输入
|
|
**描述**: 捕获和处理麦克风音频
|
|
|
|
**需求**:
|
|
- 支持音频设备选择
|
|
- 支持音频编码 (Opus)
|
|
- 支持语音活动检测 (VAD)
|
|
- 支持推按说话 (PTT)
|
|
- 支持输入音量调节
|
|
- 支持输入静音
|
|
- 支持噪声抑制
|
|
- 支持回声消除
|
|
|
|
#### FR-3.5.2 音频输出
|
|
**描述**: 播放接收到的音频
|
|
|
|
**需求**:
|
|
- 支持音频设备选择
|
|
- 支持音频解码 (Opus)
|
|
- 支持输出音量调节
|
|
- 支持输出静音
|
|
- 支持每客户端音量
|
|
- 支持音频混音
|
|
- 支持抖动缓冲
|
|
- 支持丢包隐藏
|
|
|
|
#### FR-3.5.3 音频路由
|
|
**描述**: 管理音频数据的路由
|
|
|
|
**需求**:
|
|
- 支持频道音频
|
|
- 支持私语
|
|
- 支持组私语
|
|
- 支持频道指挥官
|
|
- 支持优先发言者
|
|
- 支持音频编码质量设置
|
|
|
|
### 3.6 文件传输
|
|
|
|
#### FR-3.6.1 文件浏览
|
|
**描述**: 浏览频道文件
|
|
|
|
**需求**:
|
|
- 显示文件列表
|
|
- 显示文件大小
|
|
- 显示文件修改时间
|
|
- 支持文件搜索
|
|
- 支持目录创建
|
|
|
|
#### FR-3.6.2 文件上传
|
|
**描述**: 上传文件到频道
|
|
|
|
**需求**:
|
|
- 支持单文件上传
|
|
- 支持多文件上传
|
|
- 支持断点续传
|
|
- 支持上传进度显示
|
|
- 支持上传取消
|
|
|
|
#### FR-3.6.3 文件下载
|
|
**描述**: 下载频道文件
|
|
|
|
**需求**:
|
|
- 支持单文件下载
|
|
- 支持多文件下载
|
|
- 支持断点续传
|
|
- 支持下载进度显示
|
|
- 支持下载取消
|
|
|
|
### 3.7 身份管理
|
|
|
|
#### FR-3.7.1 身份创建
|
|
**描述**: 创建新的 TeamSpeak 身份
|
|
|
|
**需求**:
|
|
- 自动生成 ECC 密钥对
|
|
- 支持身份命名
|
|
- 支持身份导出
|
|
- 支持身份导入
|
|
|
|
#### FR-3.7.2 身份存储
|
|
**描述**: 安全存储身份信息
|
|
|
|
**需求**:
|
|
- 加密存储私钥
|
|
- 支持多身份管理
|
|
- 支持身份备份
|
|
- 支持身份恢复
|
|
|
|
#### FR-3.7.3 身份验证
|
|
**描述**: 使用身份进行验证
|
|
|
|
**需求**:
|
|
- 支持 Hashcash 计算
|
|
- 支持身份等级提升
|
|
- 支持权限令牌
|
|
- 支持身份唯一标识符计算
|
|
|
|
### 3.8 权限管理
|
|
|
|
#### FR-3.8.1 权限查看
|
|
**描述**: 查看权限信息
|
|
|
|
**需求**:
|
|
- 显示服务器组权限
|
|
- 显示频道组权限
|
|
- 显示客户端权限
|
|
- 显示权限值
|
|
- 显示权限描述
|
|
|
|
#### FR-3.8.2 权限操作
|
|
**描述**: 执行权限相关操作
|
|
|
|
**需求**:
|
|
- 添加权限(需要权限)
|
|
- 删除权限(需要权限)
|
|
- 修改权限(需要权限)
|
|
- 添加服务器组客户端
|
|
- 删除服务器组客户端
|
|
|
|
### 3.9 服务器管理
|
|
|
|
#### FR-3.9.1 服务器信息
|
|
**描述**: 查看服务器信息
|
|
|
|
**需求**:
|
|
- 显示服务器名称
|
|
- 显示服务器版本
|
|
- 显示服务器平台
|
|
- 显示在线客户端数
|
|
- 显示频道数
|
|
- 显示服务器运行时间
|
|
- 显示服务器加密模式
|
|
|
|
#### FR-3.9.2 服务器操作
|
|
**描述**: 执行服务器相关操作
|
|
|
|
**需求**:
|
|
- 修改服务器密码(需要权限)
|
|
- 修改服务器名称(需要权限)
|
|
- 查看服务器日志(需要权限)
|
|
- 发送服务器消息(需要权限)
|
|
|
|
### 3.10 热键管理
|
|
|
|
#### FR-3.10.1 热键配置
|
|
**描述**: 配置全局热键
|
|
|
|
**需求**:
|
|
- 支持输入静音切换
|
|
- 支持输出静音切换
|
|
- 支持离开状态切换
|
|
- 支持推按说话
|
|
- 支持自定义热键
|
|
|
|
#### FR-3.10.2 热键执行
|
|
**描述**: 执行热键绑定的操作
|
|
|
|
**需求**:
|
|
- 全局热键支持
|
|
- 应用内热键支持
|
|
- 热键冲突检测
|
|
- 热键状态反馈
|
|
|
|
### 3.11 设置管理
|
|
|
|
#### FR-3.11.1 应用设置
|
|
**描述**: 管理应用程序设置
|
|
|
|
**需求**:
|
|
- 用户界面设置
|
|
- 音频设备设置
|
|
- 热键设置
|
|
- 通知设置
|
|
- 语言设置
|
|
- 主题设置
|
|
|
|
#### FR-3.11.2 连接设置
|
|
**描述**: 管理连接相关设置
|
|
|
|
**需求**:
|
|
- 默认昵称
|
|
- 默认身份
|
|
- 默认频道
|
|
- 自动重连设置
|
|
- 音频编码设置
|
|
|
|
### 3.12 插件系统
|
|
|
|
#### FR-3.12.1 插件加载
|
|
**描述**: 加载和管理插件
|
|
|
|
**需求**:
|
|
- 支持动态加载插件
|
|
- 支持插件启用/禁用
|
|
- 支持插件配置
|
|
- 支持插件更新
|
|
|
|
#### FR-3.12.2 插件接口
|
|
**描述**: 提供插件开发接口
|
|
|
|
**需求**:
|
|
- 事件监听接口
|
|
- 命令注册接口
|
|
- UI 扩展接口
|
|
- 数据访问接口
|
|
|
|
## 4. 非功能需求
|
|
|
|
### 4.1 性能需求
|
|
|
|
#### NFR-4.1.1 连接性能
|
|
- 连接建立时间 < 3 秒
|
|
- 消息延迟 < 100ms
|
|
- 音频延迟 < 200ms
|
|
- 支持 1000+ 客户端的服务器
|
|
|
|
#### NFR-4.1.2 资源使用
|
|
- CPU 使用率 < 10% (空闲时)
|
|
- 内存使用 < 200MB
|
|
- 网络带宽 < 1Mbps (语音通信时)
|
|
- 磁盘空间 < 100MB (应用程序)
|
|
|
|
#### NFR-4.1.3 并发性能
|
|
- 支持 10+ 同时连接
|
|
- 支持 100+ 消息/秒
|
|
- 支持 50+ 音频流同时播放
|
|
|
|
### 4.2 可靠性需求
|
|
|
|
#### NFR-4.2.1 连接可靠性
|
|
- 支持自动重连
|
|
- 支持断点续传
|
|
- 支持数据包重传
|
|
- 支持拥塞控制
|
|
|
|
#### NFR-4.2.2 数据可靠性
|
|
- 消息不丢失
|
|
- 文件传输完整性
|
|
- 身份数据安全
|
|
- 配置数据备份
|
|
|
|
### 4.3 安全性需求
|
|
|
|
#### NFR-4.3.1 传输安全
|
|
- 使用 AES-128-EAX 加密
|
|
- 使用 ECDH 密钥交换
|
|
- 支持证书验证
|
|
- 防止中间人攻击
|
|
|
|
#### NFR-4.3.2 数据安全
|
|
- 私钥加密存储
|
|
- 敏感数据不落盘
|
|
- 安全内存处理
|
|
- 防止内存泄露
|
|
|
|
#### NFR-4.3.3 访问控制
|
|
- 身份验证
|
|
- 权限检查
|
|
- 操作审计
|
|
- 防止未授权访问
|
|
|
|
### 4.4 可用性需求
|
|
|
|
#### NFR-4.4.1 用户界面
|
|
- 响应式设计
|
|
- 键盘导航支持
|
|
- 屏幕阅读器支持
|
|
- 高对比度模式
|
|
|
|
#### NFR-4.4.2 国际化
|
|
- 支持多语言
|
|
- 支持 RTL 布局
|
|
- 支持本地化日期格式
|
|
- 支持本地化数字格式
|
|
|
|
#### NFR-4.4.3 可访问性
|
|
- 支持字体大小调整
|
|
- 支持颜色主题切换
|
|
- 支持快捷键自定义
|
|
- 支持语音反馈
|
|
|
|
### 4.5 可维护性需求
|
|
|
|
#### NFR-4.5.1 代码质量
|
|
- 模块化设计
|
|
- 清晰的接口定义
|
|
- 完整的文档
|
|
- 单元测试覆盖
|
|
|
|
#### NFR-4.5.2 日志和监控
|
|
- 详细的日志记录
|
|
- 错误报告机制
|
|
- 性能监控
|
|
- 使用统计
|
|
|
|
### 4.6 可扩展性需求
|
|
|
|
#### NFR-4.6.1 架构扩展
|
|
- 支持插件系统
|
|
- 支持自定义主题
|
|
- 支持自定义命令
|
|
- 支持自定义通知
|
|
|
|
#### NFR-4.6.2 协议扩展
|
|
- 支持协议版本协商
|
|
- 支持功能特性检测
|
|
- 支持向后兼容
|
|
- 支持向前兼容
|
|
|
|
## 5. 约束条件
|
|
|
|
### 5.1 技术约束
|
|
- 使用 Rust 作为主要开发语言
|
|
- 使用 Tauri v2 作为桌面框架
|
|
- 使用 Svelte 5 作为前端框架
|
|
- 使用 Actix 作为 Actor 框架
|
|
- 使用 SQLite 作为本地数据库
|
|
|
|
### 5.2 协议约束
|
|
- 兼容 TeamSpeak 3 协议
|
|
- 支持 IPv4 和 IPv6
|
|
- 使用 UDP 传输
|
|
- 最大数据包大小 500 字节
|
|
|
|
### 5.3 法律约束
|
|
- 不得侵犯 TeamSpeak 商标
|
|
- 不得用于商业用途(除非获得许可)
|
|
- 遵守相关法律法规
|
|
- 尊重用户隐私
|
|
|
|
## 6. 验收标准
|
|
|
|
### 6.1 功能验收
|
|
- 能够连接到官方 TeamSpeak 服务器
|
|
- 能够发送和接收文本消息
|
|
- 能够进行语音通信
|
|
- 能够浏览和管理频道
|
|
- 能够管理客户端
|
|
|
|
### 6.2 性能验收
|
|
- 连接建立时间 < 3 秒
|
|
- 消息延迟 < 100ms
|
|
- 音频延迟 < 200ms
|
|
- CPU 使用率 < 10% (空闲时)
|
|
|
|
### 6.3 安全验收
|
|
- 通过安全审计
|
|
- 无已知漏洞
|
|
- 数据加密存储
|
|
- 传输加密验证
|
|
|
|
### 6.4 兼容性验收
|
|
- Windows 10/11 兼容
|
|
- Linux (Ubuntu 20.04+) 兼容
|
|
- macOS 11+ 兼容
|
|
- Android 10+ 兼容
|
|
- Chrome/Firefox/Safari 兼容
|
|
|
|
## 7. 术语表
|
|
|
|
| 术语 | 定义 |
|
|
|------|------|
|
|
| TeamSpeak | 一种 VoIP 应用程序,用于语音通信 |
|
|
| Channel | 语音/文本通信的房间 |
|
|
| Client | 连接到服务器的用户或机器人 |
|
|
| Server | TeamSpeak 服务器实例 |
|
|
| Identity | 用户的唯一标识符 |
|
|
| Permission | 用户的操作权限 |
|
|
| Codec | 音频编码格式 |
|
|
| Opus | 现代音频编解码器 |
|
|
| ECDH | 椭圆曲线 Diffie-Hellman 密钥交换 |
|
|
| AES | 高级加密标准 |
|
|
| EAX | 认证加密模式 |
|
|
| Hashcash | 工作量证明系统 |
|
|
| VAD | 语音活动检测 |
|
|
| PTT | 推按说话 |
|
|
| TSDNS | TeamSpeak DNS 服务 |
|
|
| SRV | DNS 服务记录 |
|
|
|
|
## 8. 参考文献
|
|
|
|
1. TeamSpeak 3 协议规范 (ts3protocol.md)
|
|
2. tsdeclarations 项目文档
|
|
3. tsclientlib 项目文档
|
|
4. Qint 项目文档
|
|
5. SimpleBot 项目文档
|
|
6. ts3stats 项目文档 |