来自简单、实用、高效的在线协作工具箱。
| 工具 | 状态 | 简介 |
|---|---|---|
| PlainList | 🔨 进行中 (40%) | 计划清单 |
| Flow | 🔨 进行中 (10%) | 会议 |
想法的流动,声音的流动,连接的流动。 SFU 让流归位。
这不是一个成熟的 SFU 产品,而是一个学习/原型项目。
| 方面 | 实际情况 |
|---|---|
| 技术栈 | Go + pion/webrtc (纯 Go 实现,不依赖外部 SDK) |
| 代码来源 | 参考 pion 示例 + ion-sfu 架构 + LiveKit 设计思路 |
| SFU 核心 | Router 转发逻辑是自研,但底层依赖 pion |
| 特色 | 目前没有核心创新,是一个"可运行的基础骨架" |
| 支撑人数 | 理论上 500+,实际未压测 |
我们借鉴了谁:
- pion/webrtc — WebRTC 纯 Go 实现
- ion-sfu — 简洁的 SFU 架构参考
- LiveKit — 房间管理 + SDK 设计思路
- mediasoup — 路由算法思路
为什么这么设计:
- 选择 pion 是因为 100% Go,不需要 CGO,方便部署
- 自研 Router 是为了以后可以加调度算法
- Redis PubSub 是为了未来多节点扩展
┌─────────────────────────────────────────────────────────────┐
│ Client (Vue.js) │
│ WebRTC + Flow Client SDK (自研) │
└────────────────────────────────┬────────────────────────────┘
│ WebSocket
┌────────────────────────────────▼────────────────────────────┐
│ Go SFU 服务器 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Room │ │ Peer │ │ Router │ │ Track │ │
│ │ Manager │ │ Manager │ │ (转发) │ │ Manager │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌────────────▼────────────┐
│ Redis PubSub │
│ (可选,用于多节点) │
└─────────────────────────┘
txhy/
├── sfu/ # SFU 服务器 (Go)
│ ├── cmd/server/ # 入口
│ ├── internal/
│ │ ├── sfu/ # SFU 核心
│ │ ├── router/ # 路由转发 (待增强)
│ │ ├── room/ # 房间管理
│ │ ├── peer/ # 对等端管理
│ │ └── config/ # 配置
│ └── pkg/
│ └── redis/ # 分布式支持
│
├── backend/ # Spring Boot (用户/房间管理 API)
├── frontend/ # Vue.js (会议界面)
├── flask-service/ # Whisper 语音转写
└── sql/ # 数据库
[ ] 1. Simulcast 实现 — 目前只有框架,多码率转发未完成
[ ] 2. ICE restart / 断线重连
[ ] 3. SFU 节点健康检测 + 自动剔除
[ ] 4. 压测验证 500 人实际表现
[ ] 5. 前端 UI 优化(现在很丑)
[ ] 6. Speaker Priority 调度算法
- 音频电平检测 (RFC6464)
- 说话者自动提升视频质量
- 非发言者降为音频/静音视频
[ ] 7. Bandwidth Budget 调度器
- 房间总带宽有限
- 动态分配给最需要的人
- 这是一个真正的算法挑战
[ ] 8. 区域路由 (Regional Forwarding)
- 基于延迟的智能路由
- 北京用户走北京节点
[ ] 9. Graceful Degradation
- 带宽不够时先保声音
- 再保动作大的人的视频
[ ] 10. AI 降噪 (CRUSE / DeepFilterNet)
[ ] 11. 虚拟背景 (MediaPipe)
[ ] 12. 实时翻译 (Whisper + 翻译 API)
[ ] 13. 自动会议纪要 (GPT-4)
[ ] 14. 录制服务 (SFU 侧录制)
今日目标:搭建项目骨架,验证可行性
已完成:
- 项目结构设计
- Go SFU 核心骨架 (Room/Peer/Router/Track)
- pion/webrtc 集成
- Redis PubSub 分布式扩展预留
- Vue.js 前端基础框架
- Spring Boot 后端 API 框架
- Whisper 语音转写服务
- MySQL 数据库设计
待修复/验证:
[ ]SFU 编译验证(go mod tidy + 修复依赖)[ ]WebSocket 信令流程调通[ ]2-3 人语音通话验证
下一步(按优先级):
- SFU 先跑起来(2-3 人通话说)
- 10-20 人压测
- Simulcast 实现
- 录制
| 组件 | 技术 | 原因 |
|---|---|---|
| SFU | Go + pion/webrtc | 100% Go,无 CGO 依赖 |
| 前端 | Vue.js + Element Plus | 快速开发 |
| 后端 | Spring Boot | 企业级稳定 |
| 转写 | Flask + Whisper | 开源、免费 |
| 数据库 | MySQL | 成熟方案 |
| 缓存 | Redis | 多节点同步 |
# 1. SFU 服务器
cd sfu && go run cmd/server/main.go -port 7000
# 2. 后端 API
cd backend && mvn spring-boot:run
# 3. 前端
cd frontend && npm install && npm run dev
# 4. 语音转写 (可选)
cd flask-service && python app.pyMIT License