实战项目
7 级递进的项目阶梯。每个项目都给出可复制的目录骨架、关键代码、验收标准和踩坑清单,目标是真的能跑起来,不是只读的伪代码。
1. 项目阶梯
| 级别 | 项目 | 学到什么 | 技术栈 | 状态 |
|---|---|---|---|---|
| L0 | 同页面 Echo Demo | 三大 API、SDP、ICE 候选 | 纯浏览器 | ✅ 可运行 |
| L1 | 1v1 视频通话 | 信令、Perfect Negotiation、TURN 部署 | Node + ws + coturn | 📝 详设计 |
| L2 | 多人会议(4~16 人) | SFU、Simulcast、订阅模型 | mediasoup / LiveKit | 📝 详设计 |
| L3 | 屏幕共享 + 远程协助 | getDisplayMedia、低延迟控制通道 | + Electron 可选 | 📝 详设计 |
| L4 | WHIP/WHEP 低延迟直播 | 标准化推/拉流、CDN 边缘 | Pion / LiveKit Ingress | 📝 详设计 |
| L5 | AI 增强会议 | Insertable Streams、降噪、字幕 | onnxruntime-web / MediaPipe | 📝 详设计 |
| L6 | 跨端连麦 SDK | Web + RN + 小程序统一接口层 | uni-app + TRTC 适配 | 📝 详设计 |
状态说明:✅ 可运行 = 含完整代码;📝 详设计 = 含目录骨架、关键代码片段、验收清单。L1~L6 都给出了能直接对照实现的工程化方案,逐步会补完整可运行版本。
2. 通用交付标准
每个项目都按工程项目验收,至少包含:
| 维度 | 要求 |
|---|---|
| 目录结构 | client / server / infra 三段式,README 标注 |
| 启动文档 | 一条命令能起来,环境变量列表清晰 |
| 信令协议 | 消息类型、字段、状态机文档化 |
| 错误处理 | 断线重连、超时、ICE Restart 都覆盖 |
| 监控埋点 | getStats 上报关键指标 |
| 弱网测试 | 用 Chrome 网络限速或 Linux tc 跑过 |
| 安全 | TURN 短期凭据、房间鉴权 |
3. 推荐统一技术骨架
webrtc-app/
├── client/
│ ├── index.html
│ ├── src/
│ │ ├── signaling/ # 信令客户端
│ │ ├── rtc/ # PeerConnection 封装
│ │ ├── ui/ # 视图层
│ │ └── stats/ # 上报与可视化
│ └── package.json
├── server/
│ ├── signaling/ # 信令服务(ws / socket.io)
│ ├── sfu/ # SFU 接入(mediasoup/livekit)
│ ├── auth/ # 房间鉴权 / TURN 凭据签发
│ └── package.json
├── infra/
│ ├── coturn/ # coturn 配置
│ ├── docker-compose.yml
│ └── nginx/ # TLS 终结
└── docs/
├── architecture.md # Mermaid 架构图
├── signaling-protocol.md
└── load-test.md
4. 选型推荐
| 阶段 | 推荐 | 理由 |
|---|---|---|
| 1v1 / 教学 | 原生 API + Node ws | 不引入 SDK,看清楚每一层 |
| 多人会议(4~50) | LiveKit | 工程化最完整、文档好、有云服务可对照 |
| 多人会议(精细控制) | mediasoup | 灵活度高、Node + C++、社区强 |
| Go 后端栈 | Pion + LiveKit Server | 同 Go 生态 |
| 直播推流 | Pion WHIP / LiveKit Ingress | 标准化、CDN 友好 |
| 全托管 | 腾讯 TRTC / 声网 / 即构 | 国内合规、跨小程序方便 |
5. 弱网测试方法
5.1 Chrome 自带
DevTools → Network → Throttling,但只影响 fetch/XHR,不影响 WebRTC。
5.2 Linux tc(推荐)
# 注入 200ms 延迟 + 1% 丢包
tc qdisc add dev eth0 root netem delay 200ms loss 1%
# 限带宽到 1 Mbps
tc qdisc add dev eth0 root tbf rate 1mbit burst 32kbit latency 400ms
# 清理
tc qdisc del dev eth0 root
5.3 toxiproxy / clumsy
适合在开发机上模拟,对 Windows 用 clumsy。
6. 验收 Checklist 模板
每个项目交付时按这张表自查:
- 本地起服务能跑通 1v1 / 多人通话
- 公网部署后异网络用户能连上(含对称 NAT)
- 4G ↔ Wi-Fi 切换 5s 内自愈(ICE Restart)
- 房间鉴权失败拒绝加入
- TURN 凭据短期 + 单用户限速
- 控制台无未捕获 Promise rejection
-
getStats关键字段(freezeCount、jitter、packetsLost)有上报 - 弱网(200ms / 5% 丢包)下仍可通话
- 关闭页面后无 ICE 心跳泄漏(看服务端日志)
- README 一条命令能起来