功能全景
WebSocket 信令
Gorilla WebSocket 实现房间内 Offer/Answer/ICE Candidate 转发,支持心跳保活机制
媒体控制
静音/取消静音、摄像头开关、屏幕共享(getDisplayMedia)
DataChannel
点对点文本聊天,无需服务器中转,低延迟消息传递
本地录制
MediaRecorder 录制音视频流,导出 .webm 格式下载
多人 Mesh
房间成员列表广播,多 PeerConnection 管理,网格视频布局
Docker 部署
多阶段 Dockerfile,Go 编译 + 静态前端打包,镜像体积最小化
开发路线图
| 阶段 | 能力 | 状态 |
|---|---|---|
| 阶段 1 — 基础通话 | 一对一通话、连接状态展示、错误处理、心跳保活 | 已完成 |
| 阶段 2 — 媒体控制 | 静音/摄像头开关、屏幕共享、DataChannel 文本聊天、本地录制 | 已完成 |
| 阶段 3 — 多人房间 | 房间成员列表、自动呼叫提示、小规模 Mesh 多人通话 | 已完成 |
| 阶段 4 — 容器部署 | Docker 多阶段构建、环境变量配置 | 已完成 |
| 计划中 | TURN 支持(coturn)、HTTPS/WSS 反向代理 | 规划中 |
架构总览
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌────────────────────────────────────────────────────────────┐
│ 浏览器 A │
│ ┌────────┐ ┌──────────┐ ┌────────────────────┐ │
│ │HTML UI │──→ │ app.js │──→ │ getUserMedia │ │
│ └────────┘ └────┬─────┘ └─────────┬──────────┘ │
└─────────────────────┼────────────────────┼────────────────┘
│ WebSocket │ WebRTC P2P
┌──────▼──────┐ │
│ Go 信令服务 │ │
│ ┌─────────┐ │ │
│ │Hub/房间 │ │ │
│ │管理 │ │ │
│ └─────────┘ │ │
└──────┬──────┘ │
│ WebSocket │
┌─────────────────────┼────────────────────┼────────────────┐
│ 浏览器 B │ │ │
│ ┌────────┐ ┌────▼──────┐ ┌───────▼────────────┐ │
│ │HTML UI │──→ │ app.js │──→ │ getUserMedia │ │
│ └────────┘ └───────────┘ └────────────────────┘ │
└────────────────────────────────────────────────────────────┘
快速开始
📋 环境要求
- Go 1.22+
- Chrome / Edge / Firefox (最新版)
- Docker (可选,用于部署)
🖥️ 本地运行
1
2
3
4
5
6
7
8
9
10
11
12
# 克隆仓库
git clone https://github.com/LessUp/webrtc.git
cd webrtc
# (可选) 国内代理
go env -w GOPROXY=https://goproxy.cn,direct
# 安装依赖并启动
go mod tidy
go run ./cmd/server
# 浏览器访问 http://localhost:8080
🐳 Docker 运行
1
2
3
4
5
# 构建镜像
docker build -t webrtc .
# 运行容器
docker run --rm -p 8080:8080 webrtc
📱 使用步骤
- 打开两个浏览器窗口,访问
http://localhost:8080 - 输入相同房间名并点击 Join
- 点击左侧成员列表中的对端 ID(或手动输入),然后点击 Call
- 允许摄像头/麦克风权限,即可看到远端视频
- 通话建立后可进行文本聊天、屏幕共享与本地录制
💡 提示
确保两个浏览器访问的是同一网络地址(或配置好 STUN/TURN 服务器),WebRTC P2P 才能成功建立连接。
文档导航
技术指南
项目整体架构、前端实现、媒体控制、录制等技术详解
信令协议
信令与房间管理的深入讲解,含时序图与代码示例
部署指南
Docker 部署、HTTPS/WSS 配置、生产环境最佳实践
故障排除
常见问题与解决方案,帮助快速定位和修复问题
开发路线图
各阶段开发计划、功能规划和未来发展方向
贡献指南
开发流程、代码规范、提交信息格式和 PR 流程
技术栈
| 类别 | 技术 |
|---|---|
| 后端 | Go 1.22+、net/http、Gorilla WebSocket |
| 前端 | HTML5 + Vanilla JavaScript + CSS3 |
| 媒体 | WebRTC(getUserMedia、RTCPeerConnection、DataChannel、MediaRecorder) |
| 容器 | Docker(multi-stage build) |
| CI/CD | GitHub Actions(Go 多版本测试 + staticcheck + GitHub Pages 部署) |
项目结构
1
2
3
4
5
6
7
8
9
webrtc/
├── cmd/server/ # HTTP + WebSocket 服务入口
├── internal/signal/ # 信令逻辑(Hub、Client、Message)
├── web/ # 浏览器前端(HTML/JS/CSS)
├── docs/ # 技术文档
├── specs/ # 规范文档(产品/RFC/API/DB/测试)
├── changelog/ # 变更日志
├── deploy/ # 部署配置
└── Dockerfile # 多阶段构建
开源协议
本项目基于 MIT License 开源。