在这里插入图片描述

前言

  • 最近在做音视频会议系统服务搭建的工作任务,因为内容过多,我会逐篇分享相关的设计方案、开发思路、编程语言、使用的组件集合等等。
  • 如果你也有大型音视频会议系统搭建架构的需求,希望这些可以对你有所帮助。

EchoMeet 音视频会议系统架构设计

🎯 项目概述

EchoMeet是基于WebRTC技术的企业级音视频会议解决方案,采用三层音视频架构Go+Node.js双后端微服务设计,实现了高并发、低延迟、可扩展的视频会议系统。

核心特性

  • 🚀 高并发支持:10,000+ WebSocket并发连接
  • 🎥 多人视频会议:单房间支持50人同时在线
  • 🌐 双系统架构:管理端+客户端独立系统
  • 🔒 企业级安全:JWT认证、数据加密、权限控制
  • 📱 跨平台支持:Web、移动端、桌面端
  • 低延迟传输:基于mediasoup的SFU架构

🏗️ 系统架构设计

三层音视频架构

数据层
媒体层 - Node.js服务
信令层 - Go微服务
前端层 - WebRTC客户端
WebSocket信令
WebSocket信令
WebSocket信令
HTTP API
数据访问
数据访问
缓存
状态缓存
MySQL 8.0 数据库
端口:3306
Redis 6.0 缓存
端口:6380
Mediasoup SFU服务器
端口:3000
多Worker负载均衡
RTP/RTCP处理
client-system 用户服务
端口:8081
admin-system 管理服务
端口:8001
WebSocket信令管理器
Vue3 + mediasoup-client
React Native 移动端
Electron 桌面端

技术栈明细

层次技术栈说明
前端层Vue3 + TypeScript + Vite现代化Web应用,支持双系统独立构建
信令层Go 1.19 + Gin + WebSocket高并发信令处理,JWT认证,会议管理
媒体层Node.js + mediasoup v3SFU媒体服务器,处理音视频转发
数据层MySQL 8.0 + Redis 6.0关系型数据存储 + 高性能缓存
部署层Docker + docker-compose容器化部署,一键启动

📊 数据库设计

8张核心业务表已补充-点击跳转

-- 核心业务表结构
users                    -- 用户基础信息表
user_meeting_configs     -- 用户会议配置表
meeting_rooms           -- 会议室表(临时/固定/个人)
meetings                -- 会议表(会议会话记录)
meeting_participants    -- 会议参与者表
meeting_invitations     -- 会议邀请表
meeting_messages        -- 会议消息表(实时聊天)
meeting_recordings      -- 会议录制表
meeting_templates       -- 会议模板表
meeting_statistics      -- 会议统计表

设计特点

  • 高并发优化:合理索引设计,支持大量并发用户
  • 数据一致性:外键约束、软删除、事务处理
  • 扩展性设计:JSON字段存储、预留扩展字段
  • 性能优化:分表策略、Redis缓存设计

详细设计参考:数据库设计文档-点击跳转查看


🌐 WebSocket信令协议

信令消息类型

消息类型方向说明
authC→SJWT用户认证
join-roomC→S加入会议室
leave-roomC→S离开会议室
get-router-rtp-capabilitiesC→S获取Router能力
create-send-transportC→S创建发送传输
create-recv-transportC→S创建接收传输
connect-transportC→S连接传输通道
produceC→S生产媒体流
consumeC→S消费媒体流

WebSocket端点

  • ws://localhost:8081/api/v1/ws - WebSocket连接端点
  • GET /api/v1/ws/stats - 连接统计信息
  • GET /api/v1/ws/rooms - 会议室信息查询
  • GET /api/v1/ws/health - 服务健康检查

详细协议参考:信令协议规范(待追加


🚀 性能指标

系统性能

  • WebSocket并发连接:10,000+ 连接
  • 数据库连接池:100个连接,10个空闲
  • Redis连接池:100个连接,10个空闲
  • 协程池大小:10000个工作协程

会议能力

  • 单房间最大人数:50人
  • 系统总房间数:1000+ 房间
  • 音视频编码:VP8/VP9 + Opus
  • 网络自适应:RTT监控、丢包率统计

延迟指标

  • 信令延迟:< 50ms
  • 音视频延迟:< 200ms
  • 端到端延迟:< 500ms

🔐 安全设计

认证机制

  • JWT认证:Bearer Token,支持实时状态检查
  • 密码加密:bcrypt加密存储,强密码策略
  • 会话管理:Token过期、刷新、多端登录控制

数据安全

  • 传输加密:HTTPS/WSS安全传输
  • 数据加密:敏感字段加密存储
  • 软删除机制:数据安全可恢复
  • 链路追踪:完整的请求追踪和审计

权限控制

  • 角色权限:super_admin、admin、user三级权限
  • 会议权限:主持人、协作主持人、参与者角色
  • 功能权限:发言、共享、录制等细粒度控制

📱 前端双系统架构

独立构建系统

# 客户端系统开发
npm run dev:client    # 端口3000# 管理系统开发  
npm run dev:admin     # 端口3001# 独立构建
npm run build:client  # 输出到 dist/client
npm run build:admin   # 输出到 dist/admin

技术特点

  • 完全独立:两套系统无共享依赖
  • 独立主题:各自的CSS主题文件
  • 独立路由:独立的路由配置和守卫
  • 独立部署:可以独立部署和更新

详细架构参考:架构对比分析(待追加


🐳 Docker部署

服务架构

services:mysql:          # MySQL 8.0 数据库redis:          # Redis 6.0 缓存admin-system:   # 管理系统后端client-system:  # 客户端系统后端frontend:       # 前端静态资源# mediasoup:    # Node.js媒体服务器(开发中)

快速启动

# 克隆项目
git clone https://github.com/your-org/echomeet.git
cd echomeet# 启动所有服务
docker-compose up -d# 查看服务状态
docker-compose ps# 查看日志
docker-compose logs -f

访问地址

  • 客户端系统:http://localhost:3000
  • 管理系统:http://localhost:3001
  • 客户端API:http://localhost:8081
  • 管理端API:http://localhost:8001

🔧 开发指南

本地开发环境

后端开发
# 启动管理系统
cd backend/admin-system
go run main.go# 启动客户端系统
cd backend/client-system  
go run main.go
前端开发
cd frontend# 安装依赖
npm install# 启动客户端系统
npm run dev:client# 启动管理系统
npm run dev:admin

API文档

  • 客户端API:backend/client-system/API.md(待追加
  • 管理端API:backend/admin-system/api_doc/(待追加

📈 当前开发进度

已完成模块 (85%)

  • 数据库设计:8张核心业务表 (100%) 点击跳转查看
  • Go后端服务:双系统微服务架构 (50%)
  • WebSocket信令:完整的信令管理器 (30%)
  • 前端基础架构:双系统独立构建 (80%)
  • 部署基础设施:Docker容器化部署 (50%)

开发中模块 (0%)

  • 🔄 Mediasoup媒体服务器:Node.js SFU服务器
  • 🔄 mediasoup-client集成:前端WebRTC客户端
  • 🔄 业务API实现:DAO/Service/Controller层
  • 🔄 前端UI完善:会议室界面和控制功能

下一阶段重点

  1. Mediasoup媒体服务器实现 (2周)
  2. 前后端联调测试 (1周)
  3. 业务功能完善 (2周)

🤝 贡献指南

代码规范

  • Go代码:遵循Go官方代码规范
  • 前端代码:ESLint + Prettier格式化
  • 数据库:统一的表命名和字段规范
  • API设计:RESTful API设计原则

提交规范

feat: 新增功能
fix: 修复bug
docs: 文档更新
style: 代码格式调整
refactor: 代码重构
test: 测试相关
chore: 构建配置等

分支管理

  • main:生产环境分支
  • dev:开发分支
  • feature/*:功能开发分支
  • hotfix/*:紧急修复分支

📄 相关文档

文档说明
数据库设计详细的数据库表结构设计
信令协议WebSocket信令协议规范(待追加
Redis分析Redis使用场景和优化建议(待追加
架构对比不同架构方案的对比分析(待追加
数据流转详细的数据流转架构说明(待追加
开发总结当前开发进度和下一步计划 (待追加

📞 联系

  • 项目地址:半成品–开发中,就不献丑了

EchoMeet - 让每一次会议都精彩! 🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912747.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912747.shtml
英文地址,请注明出处:http://en.pswp.cn/news/912747.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷leetcode hot100/准备机试--图

图的基础知识【这部分建议使用acm模式】 图论理论基础 | 代码随想录 存储&#xff1a; 一般有邻接表【适合稀疏图】【数组 链表 】和邻接矩阵【适合稠密图】存储方式 注意邻接表 和 邻接矩阵的写法都要掌握&#xff01; 邻接矩阵 n个节点&#xff0c;申请n*n或者&#xf…

无代码自动化测试工具介绍

无代码自动化测试工具允许用户无需编写代码即可创建和运行测试,通过拖拽式界面或录制回放等可视化界面进行操作。 这些工具利用图形用户界面和预定义命令来创建测试,使非编程人员也能进行自动化测试。 无代码自动化测试工具使团队能够: 使用直观的拖拽界面开发和执行自动化…

python学习打卡day58

DAY 58 经典时序预测模型2 知识点回顾&#xff1a; 时序建模的流程时序任务经典单变量数据集ARIMA&#xff08;p&#xff0c;d&#xff0c;q&#xff09;模型实战SARIMA摘要图的理解处理不平稳的2种差分 n阶差分---处理趋势季节性差分---处理季节性 建立一个ARIMA模型&#xf…

分布式锁的实现方式:使用 Redisson 实现分布式锁( Spring Boot )

Redisson提供了分布式和可扩展的Java数据结构&#xff0c;包括分布式锁的实现。 1. 添加依赖 在pom.xml中添加Redisson依赖&#xff1a; <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>…

Web基础关键_004_CSS(二)

目 录 一、样式 1.行内样式 2.内部样式 3.外部样式 二、选择器优先级 1.非关系选择器 2.关系选择器 三、属性 四、盒子模型 五、元素 1.块级元素 2.行内元素 3.行内块级元素 4.元素类型转换 六、浮动 七、定位 1.静态定位 2.相对定位 3.绝对定位 4.固定定位 …

数据使用权与所有权分离:能否诞生“数据租赁”市场

——首席数据官高鹏律师数字经济团队创作&#xff0c;AI辅助 数据如矿藏&#xff0c;开采需“契约” 想象一座蕴藏着无尽资源的数字矿山&#xff1a;企业或个人拥有数据的“所有权”&#xff0c;如同手握矿脉的产权&#xff0c;但若无法高效挖掘其价值&#xff0c;矿石终将沉…

【esp32s3】2 - 第一个组件

下面的内容编写时间跨度有点大&#xff0c;乱了得一团&#xff0c;也没ai整理。食之无味&#xff0c;弃之可惜。 推荐笔记&#xff1a;ESP32 之 ESP-IDF 教学&#xff08;十八&#xff09;—— 组件配置&#xff08;KConfig&#xff09; 推荐笔记&#xff1a;Kconfig 拓展 乐鑫…

【Java_EE】单例模式、阻塞队列、线程池、定时器

目录 单例模式 饿汉模式<代码> 懒汉模式<代码> 阻塞队列 阻塞队列概念 阻塞队列解决的问题 阻塞队列工作原理 阻塞队列的优/缺点 优点 缺点 模拟实现阻塞队列<代码> 线程池 线程池概念 线程池解决的问题 线程池参数 四种拒绝策略 线程池工作…

Redis初识第七期---ZSet的命令和应用场景

ZSet相较于Set来说&#xff0c;它又是有序的&#xff0c;这个有序指的就是我们通常意义上的有序了&#xff0c;ZSet内部中是按照升序来排序的。 排序规则&#xff1a;ZSet相较于Set来说&#xff0c;它内部引入了一个新的属性&#xff1a;分数&#xff08;Score&#xff09;&am…

Wps开放平台v5升级v7上传实体文件踩坑(Java使用restTemplate)

背景&#xff1a; 最近接到一个老项目需求&#xff0c;之前开发的WPS开放平台文件&#xff08;商密集成&#xff09;预览功能因为升级需要重新对接api&#xff0c;新的上传文件接口踩坑特意记录一下。 这里出问题的是第二步&#xff0c;请求文件上传信息 踩坑代码 调用后403 p…

啥时候上RAG?啥时候上微调?丨实战笔记

哈喽&#xff0c;大家好&#x1f44f; 我是阿星&#xff01; 现在很多AI科普文章都会提到微调&#xff0c;RAG。 但是没有实战的过的同学可能会问&#x1f914;—— 啥时候用RAG&#xff1f;啥时候用微调呢&#xff1f;有啥区别&#xff1f;不都是让模型增加知识面的吗&…

RabbitMQ-基础篇

前言&#xff1a; 今天开始学RabbitMQ,还是跟着黑马的课程。 今日所学&#xff1a; RabbitMQ介绍RabbitMQ入门Java客户端中的MQ 1.RabbitMQ介绍 1.1 什么是RabbitMQ RabbitMQ 是一个开源的消息代理软件&#xff08;消息队列中间件&#xff09;&#xff0c;实现了高级消息…

docker-compose配置redis哨兵详细步骤和配置文件

docker-compose配置redis哨兵详细步骤和配置文件 目录结构调整 redis-cluster/ ├── config/ │ ├── master.conf # 主节点配置 │ ├── slave1.conf # 从节点1配置 │ ├── slave2.conf # 从节点2配置 │ ├── sentinel1.…

多模态大语言模型arxiv论文略读(146)

Exploring Response Uncertainty in MLLMs: An Empirical Evaluation under Misleading Scenarios ➡️ 论文标题&#xff1a;Exploring Response Uncertainty in MLLMs: An Empirical Evaluation under Misleading Scenarios ➡️ 论文作者&#xff1a;Yunkai Dang, Mengxi G…

【教程】Linux中限制用户可以使用的GPU数量 | 附脚本

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景说明 设置方法 管理脚本 进阶限制 恢复默认组 注意事项 背景说明 比较简单的方式是使用group来管理权限&#xff0c;这种方式能限制哪些…

90.xilinx复位低电平(一般使用低电平复位)

Xilinx FPGA 中的寄存器&#xff08;Flip-Flop&#xff09;**确实支持异步复位**&#xff0c;但具体实现方式取决于你使用的设计方法&#xff08;HDL 代码风格或原语实例化&#xff09;。以下是详细说明&#xff1a; --- ### 1. **Xilinx 寄存器的复位特性** - **同步复位…

NVMe高速传输之摆脱XDMA设计10: DMA 控制单元设计

DMA 控制单元负责控制 DMA 传输事务&#xff0c; 该单元承担了 DMA 事务到 NVMe 事务的转换任务&#xff0c; 使用户对数据传输事务的控制更加简单快捷。 DMA 控制功能由 DMA寄存器组实现。 DMA 寄存器组包含 DMA 操作寄存器、 DMA 长度寄存器、 DMA 源目的地址寄存器和 DMA 状…

如何设置电脑定时休眠?操作指南详解

长时间运行电脑会导致硬件过热&#xff0c;缩短其使用寿命。定时关机有助于让硬件得到休息&#xff0c;降低因长时间高负荷工作导致损坏的风险。 它的界面简洁直观&#xff0c;功能却十分实用&#xff0c;涵盖了定时关机、重启、注销、休眠、待机以及锁定等多种操作。 以设置“…

LeetCode[617]合并二叉树

思路&#xff1a; 我们合并左右子树&#xff0c;在递归左右子树的时候&#xff0c;一定要保证左右子树不为空&#xff0c;如果左子树为空&#xff0c;那么直接返回右子树就行了&#xff0c;即使右子树为空。如果右子树为空那么直接返回左子树就行了&#xff0c;这样判断完就正常…

Redis 常用五大数据类型

1、Redis 关键字&#xff08;Key&#xff09; keys * 查看当前库所有keyexists [key] 判断某个key是否存在type [key] 查看当前key的数据类型del [key] 删除指定的key数据unlink [key] 根据value选择非阻塞删除&#xff0c;仅将keys从keyspace元数据中删除&#xff0c;真正的删…