编程 EchoChat:Go语言音视频会议直播系统,控制面与媒体面分离架构设计

2026-05-14 08:41:45 +0800 CST views 7

EchoChat:Go语言音视频会议直播系统,控制面与媒体面分离架构设计

标签: 音视频 / 开源项目 / Go / mediasoup / SFU / 直播
原文: 微信公众号「码农先森」https://mp.weixin.qq.com/s/_aMiVNKiCEaOUYVOJ1OxTg


核心亮点

EchoChat 是一套跨端可用、可扩展、可演进的实时音视频会议直播系统,支持即时聊天、多人音视频会议、互动直播。采用控制面与媒体面彻底分离的架构:Go 处理业务逻辑和信令,mediasoup C++ SFU 专注音视频转发,媒体流直连 SFU Worker 不经过 Go 服务。前台 uniapp 多端适配(H5/App/小程序),后台 Vue3 + Element Plus 管理端。


技术栈

层级技术说明
前台前端uniapp (Vue 3) + mediasoup-client多端适配(H5/App/小程序)
后台管理端Vue 3 + Vite + Element PlusPC Web 管理后台
后端服务Go (Gin + GORM + Wire + zap)业务逻辑、信令控制
媒体服务Node.js + mediasoupSFU 媒体控制与转发
数据库PostgreSQL 17持久化数据存储
缓存Redis 7实时状态、会话缓存
部署Docker Compose / Nginx容器化部署,预留 K8s

系统架构

客户端 (uniapp / Vue3 管理端)
    │
    │ WebSocket + HTTP
    │
Go 单体服务 (模块化)
    │ ├── auth      用户认证鉴权
    │ ├── im        即时通讯
    │ ├── contact   联系人管理
    │ ├── meeting   会议控制/信令
    │ ├── notify    消息通知
    │ └── admin     后台管理
    │
    ├── PostgreSQL  (持久化数据)
    ├── Redis       (实时状态)
    │
    │ HTTP
    │
mediasoup Node 服务
    │ IPC
mediasoup Worker (C++ SFU)

核心设计思想:控制面与媒体面分离

  • Go 服务:处理所有业务逻辑和信令控制(用户认证、会议管理、IM、通知)
  • mediasoup:专注音视频媒体转发(C++ SFU Worker)
  • 媒体流直连 SFU Worker:音视频数据不经过 Go 服务,降低延迟和 Go 服务负载

这种分离架构意味着:

  1. Go 服务不会成为音视频的性能瓶颈
  2. SFU 可以独立水平扩展
  3. 业务逻辑和媒体处理可以独立迭代部署

项目结构

EchoChat/
├── frontend/              # 前台用户端 (uni-app + Vue 3.4)
├── admin/                 # 后台管理端 (Vue 3.5 + Element Plus)
├── backend/
│   └── go-service/        # Go 后端服务 (Gin + GORM + Wire)
│       ├── app/           # 业务模块 (auth / admin)
│       ├── cmd/server/    # 服务入口
│       ├── config/        # 配置文件
│       ├── pkg/           # 公共包 (db / logs / middleware / utils)
│       └── router/        # 路由聚合
├── media-server/          # mediasoup Node 媒体服务 (Phase 3)
├── deploy/                # 部署配置 (Docker Compose)
├── design-system/         # UI 设计系统 (ui-ux-pro-max 生成)
├── docs/                  # 项目文档
│   ├── progress/          # 开发进度
│   ├── plans/             # 实施计划
│   ├── api/               # API 接口文档
│   └── architecture/      # 架构设计文档
└── README.md

快速开始

环境要求

  • Go 1.23+
  • Node.js 18+
  • Docker & Docker Compose
  • PostgreSQL 17(通过 Docker 自动启动)
  • Redis 7(通过 Docker 自动启动)

方式一:一键脚本(推荐)

项目采用「首次初始化 / 日常启停」职责分离模式:

脚本用途频率
scripts/dev-setup.sh首次环境初始化:检查 Docker、拉起中间件、健康检查仅首次
scripts/start.sh日常启动:秒级拉起全部服务每天多次
scripts/stop.sh日常停止:优雅终止应用层,默认保留容器每天多次
scripts/status.sh状态查看:端口/PID/容器一览排障随时
# 首次 clone 后执行一次
./scripts/dev-setup.sh

# 日常启停
./scripts/start.sh          # 启动全部
./scripts/stop.sh           # 停止应用层(保留中间件)
./scripts/stop.sh --all     # 停止全部(含中间件)

# 单项启停
./scripts/start.sh backend
./scripts/stop.sh frontend

后台进程的 PID 与日志默认写入 .run/(已加入 gitignore),排障时查看 .run/logs/*.log

方式二:Docker Compose 全量启动

cd deploy
docker compose -f docker-compose.dev.yml up -d

方式三:分步手动启动

# 1. 基础设施
cd deploy && docker compose -f docker-compose.dev.yml up -d postgres redis

# 2. Go 后端
cd backend/go-service && go mod tidy && go run cmd/server/main.go

# 3. 前台用户端
cd frontend && npm install --legacy-peer-deps && npm run dev:h5

# 4. 后台管理端
cd admin && npm install && npm run dev

服务端口

服务端口说明
前台用户端 (H5)5173http://localhost:5173
后台管理端3100http://localhost:3100
Go 后端 API8085http://localhost:8085(/health 健康检查)
PostgreSQL5432Docker 容器 echochat-postgres
Redis6379Docker 容器 echochat-redis
MinIO API9000对象存储,S3 兼容
MinIO Console9001http://localhost:9001

适用场景

  • 企业内部音视频会议系统
  • 在线教育互动直播
  • 远程协作与即时通讯
  • 社交平台音视频聊天
  • 需要私有化部署的政企场景

项目信息

属性详情
项目名EchoChat
GitHubhttps://github.com/bojinyuan00/EchoChat
后端Go (Gin + GORM + Wire + zap)
前端uniapp (Vue 3) + mediasoup-client
管理端Vue 3 + Vite + Element Plus
媒体Node.js + mediasoup (C++ SFU)
数据库PostgreSQL 17 / Redis 7
部署Docker Compose / Nginx,预留 K8s
架构特点控制面与媒体面分离

本文整理自微信公众号「码农先森」,原文链接:https://mp.weixin.qq.com/s/_aMiVNKiCEaOUYVOJ1OxTg

复制全文 生成海报 音视频 开源项目 Go mediasoup SFU 直播

推荐文章

markdowns滚动事件
2024-11-19 10:07:32 +0800 CST
如何在Vue3中定义一个组件?
2024-11-17 04:15:09 +0800 CST
Golang中国地址生成扩展包
2024-11-19 06:01:16 +0800 CST
Vue3中如何实现国际化(i18n)?
2024-11-19 06:35:21 +0800 CST
Vue3结合Driver.js实现新手指引功能
2024-11-19 08:46:50 +0800 CST
JavaScript 的模板字符串
2024-11-18 22:44:09 +0800 CST
LangChain快速上手
2025-03-09 22:30:10 +0800 CST
pycm:一个强大的混淆矩阵库
2024-11-18 16:17:54 +0800 CST
程序员茄子在线接单