@@ -3,54 +3,135 @@ layout: default
33title : WebRTC
44---
55
6- # WebRTC
6+ [ ![ License: MIT] ( https://img.shields.io/badge/License-MIT-blue.svg )] ( https://github.com/LessUp/webrtc/blob/main/LICENSE )
7+ ![ Go] ( https://img.shields.io/badge/Go-1.22+-00ADD8?logo=go&logoColor=white )
8+ ![ WebRTC] ( https://img.shields.io/badge/WebRTC-Enabled-333333?logo=webrtc&logoColor=white )
9+ ![ Docker] ( https://img.shields.io/badge/Docker-Ready-2496ED?logo=docker&logoColor=white )
710
8- 基于 Go 的最小可用 WebRTC 示例项目 — WebSocket 信令服务器与浏览器端 Demo,适合作为实时音视频应用的入门模板 。
11+ 基于 Go 的 WebRTC 示例项目,提供完整的 WebSocket 信令服务与浏览器端 Demo。从一对一通话到多人 Mesh 房间,覆盖 WebRTC 核心能力的学习与实践 。
912
10- ## 核心特性
11-
12- - ** WebSocket 信令** — Gorilla WebSocket 实现房间内 Offer/Answer/ICE Candidate 转发
13- - ** 浏览器前端** — 一键采集音视频并发起点对点呼叫
14- - ** Go Modules** — 依赖管理,便于扩展与部署
15- - ** 可扩展架构** — 可进一步接入 TURN/SFU/录制等能力
13+ ---
1614
17- ## 文档
15+ ## 已实现功能
1816
19- - [ README] ( README.md ) — 项目概述与快速开始
20- - [ 使用指南] ( docs/guide.md ) — 详细使用教程
21- - [ 信令协议] ( docs/signaling.md ) — WebSocket 信令协议文档
17+ | 阶段 | 能力 | 状态 |
18+ | ------| ------| :----:|
19+ | ** 阶段 1** | 一对一通话、状态展示、错误处理、心跳保活 | ✅ |
20+ | ** 阶段 2** | 静音/摄像头开关、屏幕共享、DataChannel 文本聊天、本地录制 | ✅ |
21+ | ** 阶段 3** | 房间成员列表、自动呼叫提示、小规模 Mesh 多人通话 | ✅ |
22+ | ** 阶段 4** | Docker 多阶段构建与部署 | ✅ |
23+ | ** 计划中** | TURN 支持(coturn)、HTTPS/WSS 反向代理 | 🔜 |
2224
23- ## 架构
25+ ## 架构总览
2426
2527```
26- Browser ──HTTP GET /──→ HTTP 静态文件
27- Browser ──WebSocket /ws──→ Signal Hub
28- Browser ──WebRTC 媒体通道──→ 远端浏览器
28+ ┌─────────────────────────────────────────────────┐
29+ │ 浏览器 A │
30+ │ ┌────────┐ ┌──────────┐ ┌──────────────┐ │
31+ │ │ HTML UI│───→│ app.js │───→│ getUserMedia │ │
32+ │ └────────┘ └────┬─────┘ └──────┬───────┘ │
33+ │ │ │ │
34+ └─────────────────────┼─────────────────┼──────────┘
35+ │ WebSocket │ WebRTC P2P
36+ ┌──────▼──────┐ │
37+ │ Go 后端 │ │
38+ │ ┌──────────┐│ │
39+ │ │Signal Hub││ │
40+ │ │ (房间管理) ││ │
41+ │ └──────────┘│ │
42+ └──────┬──────┘ │
43+ │ WebSocket │
44+ ┌─────────────────────┼────────────────┼───────────┐
45+ │ 浏览器 B │ │ │
46+ │ ┌────────┐ ┌────▼─────┐ ┌─────▼────────┐ │
47+ │ │ HTML UI│───→│ app.js │───→│ getUserMedia │ │
48+ │ └────────┘ └──────────┘ └──────────────┘ │
49+ └──────────────────────────────────────────────────┘
2950```
3051
52+ ** 信令流程** : Browser → WebSocket ` /ws ` → Signal Hub(Offer / Answer / ICE Candidate 转发)→ WebSocket → Browser
53+ ** 媒体流程** : Browser ←→ WebRTC P2P 音视频 / DataChannel ←→ Browser
54+
3155## 快速开始
3256
3357``` bash
34- # 克隆项目
35- git clone https://github.com/LessUp/WebRTC .git
36- cd WebRTC
58+ # 克隆
59+ git clone https://github.com/LessUp/webrtc .git
60+ cd webrtc
3761
38- # 运行服务器
39- go run cmd/server/main.go
62+ # (可选)国内代理
63+ go env -w GOPROXY=https://goproxy.cn,direct
4064
65+ # 启动
66+ go mod tidy
67+ go run ./cmd/server
4168# 浏览器访问 http://localhost:8080
4269```
4370
71+ ### Docker
72+
73+ ``` bash
74+ docker build -t webrtc .
75+ docker run --rm -p 8080:8080 webrtc
76+ ```
77+
78+ ### 本地测试步骤
79+
80+ 1 . 打开两个浏览器窗口,访问 ` http://localhost:8080 `
81+ 2 . 输入相同房间名并 Join
82+ 3 . 复制一方 Your ID 到另一方 Remote ID,点击 Call
83+ 4 . 允许摄像头/麦克风权限,即可看到远端视频
84+
85+ ## 核心特性
86+
87+ - ** WebSocket 信令** — Gorilla WebSocket 实现房间内 Offer/Answer/ICE Candidate 转发,支持心跳保活
88+ - ** 媒体控制** — 静音/取消静音、摄像头开关、屏幕共享(` getDisplayMedia ` )
89+ - ** DataChannel** — 点对点文本聊天,无需服务器中转
90+ - ** 本地录制** — MediaRecorder 录制音视频流,导出 ` .webm ` 下载
91+ - ** 多人 Mesh** — 房间成员列表广播,多 PeerConnection 管理,网格视频布局
92+ - ** Docker** — 多阶段 Dockerfile,Go 编译 + 静态前端打包
93+
94+ ## 配置
95+
96+ | 环境变量 | 说明 | 默认值 |
97+ | ---------| ------| --------|
98+ | ` ADDR ` | HTTP 监听地址 | ` :8080 ` |
99+ | ` WS_ALLOWED_ORIGINS ` | WebSocket 允许来源(逗号分隔) | ` localhost ` |
100+
101+ ## 项目结构
102+
103+ ```
104+ webrtc/
105+ ├── cmd/server/ # HTTP + WebSocket 入口
106+ ├── internal/signal/ # 信令逻辑(房间、消息转发)
107+ ├── web/
108+ │ ├── index.html # 浏览器 UI
109+ │ ├── app.js # WebRTC & 信令逻辑
110+ │ └── styles.css # 样式
111+ ├── docs/
112+ │ ├── guide.md # 项目技术说明
113+ │ └── signaling.md # 信令协议详解
114+ ├── changelog/ # 变更日志
115+ └── Dockerfile # 多阶段构建
116+ ```
117+
44118## 技术栈
45119
46120| 类别 | 技术 |
47121| ------| ------|
48122| 后端 | Go 1.22+ |
49123| 信令 | Gorilla WebSocket |
50- | 前端 | HTML + JavaScript |
51- | 容器 | Docker |
124+ | 前端 | HTML + Vanilla JS |
125+ | 媒体 | WebRTC (getUserMedia, RTCPeerConnection, DataChannel, MediaRecorder) |
126+ | 容器 | Docker (multi-stage) |
127+ | CI | GitHub Actions |
52128
53- ## 链接
129+ ---
130+
131+ ## 文档
54132
55- - [ GitHub 仓库] ( https://github.com/LessUp/WebRTC )
56- - [ README] ( README.md )
133+ - [ 完整 README] ( README.md )
134+ - [ 使用指南] ( docs/guide.md ) — 架构、前端、媒体、录制
135+ - [ 信令协议] ( docs/signaling.md ) — 信令与房间管理深入讲解
136+ - [ 开发路线图] ( ROADMAP.md )
137+ - [ 贡献指南] ( CONTRIBUTING.md )
0 commit comments