在这里插入图片描述

前言

计划重新构建一套 音视频大型会议直播 系统,底层使用 mediasoup ,信令业务层使用 Golang ,前端使用 uniapp + mediasoup-client ,然后就是数据库服务postgresql+redis等等,一步一步,逐步来

从“技术选型”迈进到系统工程设计。项目计划可直接作为后续详细设计蓝本的总纲,不是泛泛而谈的 PPT 文案。

下面内容分 7 个部分,可以把它当成「音视频会议系统 0→1 架构说明书」。


一、项目整体目标与定位

🎯 项目目标

构建一套 跨端可用、可扩展、可演进 的实时音视频系统,支持:
•	多人音视频会议
•	互动直播室
•	后期可扩展:录制、转推、跨服务器、超大房间

🎯 技术核心思想

•	控制面与媒体面彻底分离 
•	业务系统与实时系统解耦

这是选用 Go + mediasoup 的最大价值所在。


二、整体技术架构(总览)

技术栈总览

┌────────────────────────────┐
│        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 连接	✅
会议规则	❌
房间管理	❌

📌 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	持久化


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 分析
📌 用途
•	会议事件分发
•	异步处理
•	解耦系统模块

四、系统运行时的完整流程(简化版)

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
•	飞书会议

在思想上都是一致的


Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐