Skip to content

rainhuang0220/Flow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flow

来自简单、实用、高效的在线协作工具箱。


项目状态

已规划

工具 状态 简介
PlainList 🔨 进行中 (40%) 计划清单
Flow 🔨 进行中 (10%) 会议

Flow — 会议

想法的流动,声音的流动,连接的流动。 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 侧录制)

开发日志

2026-04-03

今日目标:搭建项目骨架,验证可行性

已完成:

  • 项目结构设计
  • Go SFU 核心骨架 (Room/Peer/Router/Track)
  • pion/webrtc 集成
  • Redis PubSub 分布式扩展预留
  • Vue.js 前端基础框架
  • Spring Boot 后端 API 框架
  • Whisper 语音转写服务
  • MySQL 数据库设计

待修复/验证:

  • [ ] SFU 编译验证(go mod tidy + 修复依赖)
  • [ ] WebSocket 信令流程调通
  • [ ] 2-3 人语音通话验证

下一步(按优先级):

  1. SFU 先跑起来(2-3 人通话说)
  2. 10-20 人压测
  3. Simulcast 实现
  4. 录制

技术栈

组件 技术 原因
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.py

License

MIT License

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors