feat:boke参考
This commit is contained in:
266
boke.md
Normal file
266
boke.md
Normal 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的职责
|
||||
|
||||

|
||||
|
||||
|
||||
#### 📌 mediasoup-client 核心作用一句话
|
||||
• 把“业务信令”翻译成“浏览器能跑的 WebRTC 行为”
|
||||
|
||||
#### 📌 与其他模块的连接
|
||||
• WebSocket ⇄ Go 信令层
|
||||
• RTP / DTLS ⇄ mediasoup Worker(直连)
|
||||
|
||||
---
|
||||
|
||||
### 2️⃣ Go 控制层(系统中枢)
|
||||
|
||||
这是整个系统的“大脑”
|
||||
|
||||
#### 📌 核心职责
|
||||
|
||||
##### ✅ 信令系统
|
||||
• WebSocket 长连接
|
||||
• 消息广播
|
||||
• 状态同步
|
||||
|
||||
##### ✅ 会议系统
|
||||
• 房间创建 / 销毁
|
||||
• 用户进房 / 退房
|
||||
• 主持人 / 角色管理
|
||||
• 发言权限控制
|
||||
|
||||
##### ✅ 安全与鉴权
|
||||
• JWT / Token
|
||||
• 防止客户端滥用 mediasoup API
|
||||
|
||||
##### ✅ 媒体控制编排
|
||||
• 什么时候创建 Transport
|
||||
• 什么时候 Produce / Consume
|
||||
• 什么时候关闭流
|
||||
|
||||
#### 📌 不负责的事情(很重要)
|
||||
• ❌ 不处理 RTP
|
||||
• ❌ 不参与媒体转发
|
||||
• ❌ 不做 WebRTC 协议
|
||||
|
||||
#### 📌 与其他模块的连接
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 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
|
||||
• 飞书会议
|
||||
在思想上都是一致的
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user