feat:boke参考

This commit is contained in:
bujinyuan
2026-02-27 15:56:51 +08:00
parent 9dcac4a633
commit bed50841dc

266
boke.md Normal file
View File

@@ -0,0 +1,266 @@
image.png
# 前言
> 计划重新构建一套 `音视频大型会议直播` 系统,底层使用` mediasoup` ,信令业务层使用 `Golang` ,前端使用 `uniapp +
> mediasoup-client` ,然后就是数据库服务`postgresql+redis`等等,一步一步,逐步来
从“技术选型”迈进到系统工程设计。项目计划可直接作为后续详细设计蓝本的总纲,不是泛泛而谈的 PPT 文案。
下面内容分 7 个部分,可以把它当成「音视频会议系统 0→1 架构说明书」。
----
## 一、项目整体目标与定位
### 🎯 项目目标
#### 构建一套 跨端可用、可扩展、可演进 的实时音视频系统,支持:
• 多人音视频会议
• 互动直播室
• 后期可扩展:录制、转推、跨服务器、超大房间
### 🎯 技术核心思想
• 控制面与媒体面彻底分离
• 业务系统与实时系统解耦
这是选用 **`Go + mediasoup`** 的最大价值所在。
----
## 二、整体技术架构(总览)
### 技术栈总览
```cpp
┌────────────────────────────┐
Client
uniapp + mediasoup-client
└───────────▲────────────────┘
WebSocket / HTTPS
┌───────────┴────────────────┐
Go 控制层
(信令 / 会议 / 鉴权)
└───────────▲────────────────┘
RPC / HTTP
┌───────────┴────────────────┐
mediasoup Node
(媒体控制 API)
└───────────▲────────────────┘
IPC
┌───────────┴────────────────┐
mediasoup Worker
(C++ SFU)
└────────────────────────────┘
```
---
## 三、各组成部分详细说明(这是核心)
### 1⃣ 客户端层uniapp + mediasoup-client
#### 📌 构成
• uniapp
• UI、页面、交互
• 多端统一H5 / App / 小程序)
• mediasoup-client
• WebRTC 协商
• 音视频采集 / 编码 / 发送 / 接收
#### 📌 uniapp与mediasoup-client的职责
![职责 是否负责
UI 展示 ✅
摄像头 / 麦克风 ✅
WebRTC 连接 ✅
会议规则 ❌
房间管理 ❌](https://i-blog.csdnimg.cn/direct/022e41e28c9a47c3be74c77aabaed381.png)
#### 📌 mediasoup-client 核心作用一句话
• 把“业务信令”翻译成“浏览器能跑的 WebRTC 行为”
#### 📌 与其他模块的连接
• WebSocket ⇄ Go 信令层
• RTP / DTLS ⇄ mediasoup Worker直连
---
### 2⃣ Go 控制层(系统中枢)
这是整个系统的“大脑”
#### 📌 核心职责
##### ✅ 信令系统
• WebSocket 长连接
• 消息广播
• 状态同步
##### ✅ 会议系统
• 房间创建 / 销毁
• 用户进房 / 退房
• 主持人 / 角色管理
• 发言权限控制
##### ✅ 安全与鉴权
• JWT / Token
• 防止客户端滥用 mediasoup API
##### ✅ 媒体控制编排
• 什么时候创建 Transport
• 什么时候 Produce / Consume
• 什么时候关闭流
#### 📌 不负责的事情(很重要)
• ❌ 不处理 RTP
• ❌ 不参与媒体转发
• ❌ 不做 WebRTC 协议
#### 📌 与其他模块的连接
![对象 方式
客户端 WebSocket
mediasoup Node HTTP / RPC
Redis 状态缓存
PostgreSQL 持久化](https://i-blog.csdnimg.cn/direct/b0b592baa6974635b8af8fbd13053c03.png)
---
### 3⃣ mediasoup Node 层(媒体控制适配层)
##### 📌 本质定位
- C++ SFU 的“遥控器”
##### 📌 职责
• 管理 Worker
• 创建 Router
• 创建 WebRtcTransport
• 管理 Producer / Consumer
##### 📌 特点
• 不懂业务
• 不懂用户
• 只懂“媒体对象”
##### 📌 为什么单独拆出来?
• C++ Worker 高性能
• Node 层方便控制与扩展
• 解耦 Go 与 C++
---
### 4⃣ mediasoup Worker真正的 SFU
##### 📌 这是“发动机” ---- 负责:
• RTP 转发
• 拥塞控制
• 带宽自适应
• 多人流转发
##### 📌 特点
• 极高性能
• 完全不关心业务
• 媒体一旦开始,不再经过 Go
-----
### 5⃣ PostgreSQL强一致数据
##### 📌 存什么?
• 用户
• 房间元信息
• 会议记录
• 权限配置
##### 📌 特点
• 强一致
• 可审计
• 不放“实时状态”
----
### 6⃣ Redis实时状态 & 协调)
##### 📌 存什么?
• 房间在线用户
• Transport / Producer 映射
• 用户状态mute / speaking
• 跨 Go 实例共享状态
##### 📌 特点
• 高速
• 非持久
• 非常适合会议系统
----
### 7⃣ 消息中间件(可选但推荐)
##### 📌 什么时候需要?
• 多 Go 实例
• 跨服务器会议
• 录制 / 转码 / AI 分析
##### 📌 用途
• 会议事件分发
• 异步处理
• 解耦系统模块
----
## 四、系统运行时的完整流程(简化版)
```cpp
1. 用户打开客户端
2. WebSocket 连接 Go
3. Go 校验并允许进房
4. Go 调用 mediasoup 创建资源
5. 前端 mediasoup-client 建立 WebRTC
6. 媒体流直达 mediasoup Worker
7. Go 只负责控制和状态
```
----
## 五、这样设计的好处(非常关键)
### ✅ 高性能
• 媒体流不经过 Go
• SFU 专注转发
### ✅ 高可扩展
• Go 可横向扩展
• Worker 可多进程 / 多机
### ✅ 易演进
• 后期加录制、转推、AI
• 不影响现有会议
### ✅ 技术边界清晰
• Go 写业务
• JS 写 WebRTC
• C++ 跑媒体
----
## 六、这个方案非常“工程化”的原因
这个方案是“企业级音视频系统”的标准形态
### 这套架构与:
• 腾讯会议
• Zoom
• 飞书会议
在思想上都是一致的
---