AppRTC

Abstract

AppRTC 示例应用

Authors

Walter Fan

Status

v1.0

Updated

2026-08-17

概述

AppRTC 是 Google 官方提供的 WebRTC 示例应用,也是最经典的 WebRTC Demo。 它展示了一个完整的 P2P 视频通话流程,包括信令、ICE、DTLS 握手和媒体传输。

虽然 AppRTC 的托管服务(appr.tc)已经下线,但其源码仍然是学习 WebRTC 的宝贵参考。

备注

Google 推荐使用更新的示例:https://github.com/niccolosalvato/webrtc-samples AppRTC 代码较旧,但其架构设计仍有学习价值。

架构

        flowchart TB
  subgraph CLIENTS["客户端"]
    BA["Browser A<br/>apprtc.js"]
    BB["Browser B<br/>apprtc.js"]
  end
  subgraph SIG["Signaling Server<br/>Google App Engine / Python"]
    RM["Room management<br/>创建/加入房间"]
    MR["Message relay<br/>转发 SDP/ICE"]
    CO["Collider<br/>WebSocket 服务"]
  end
  BA <-->|WebRTC P2P Media| BB
  BA -->|WebSocket / Channel API| SIG
  BB -->|WebSocket / Channel API| SIG
    

组件:

  • Web Client:HTML5 + JavaScript,使用 WebRTC API

  • App Engine Server:Python,负责房间管理和初始信令

  • Collider:Go 编写的 WebSocket 服务,负责实时信令中继

  • TURN Server:可选的 TURN 中继服务

信令流程

        sequenceDiagram
  participant BA as Browser A
  participant S as Server
  participant BB as Browser B

  BA->>S: GET /join/room123
  S-->>BA: room_config + is_initiator=true
  BB->>S: GET /join/room123
  S-->>BB: room_config + is_initiator=false
  BA->>S: WebSocket connect
  BB->>S: WebSocket connect
  BA->>S: SDP Offer
  S->>BB: SDP Offer
  BB->>S: SDP Answer
  S->>BA: SDP Answer
  BA->>S: ICE Candidates
  S->>BB: ICE Candidates
  BB->>S: ICE Candidates
  S->>BA: ICE Candidates
  Note over BA,BB: P2P Media RTP/RTCP
    

本地部署

虽然 AppRTC 设计为运行在 Google App Engine 上,但也可以本地部署用于学习:

# 克隆源码
git clone https://github.com/webrtc/apprtc.git
cd apprtc

# 安装依赖
npm install
pip install -r requirements.txt

# 编译前端
grunt build

# 使用 Docker 一键部署(推荐)
# 参见 https://blog.piasy.com/2017/06/17/out-of-the-box-webrtc-dev-env/

Docker 部署方式更方便,包含了 App Engine 模拟器、Collider 和 coturn:

docker run -d --name apprtc \
    -p 8080:8080 -p 8089:8089 -p 3478:3478 \
    piasy/apprtc-server

学习要点

从 AppRTC 源码中可以学到的关键 WebRTC 知识:

  1. 完整的信令流程:SDP Offer/Answer 交换 + ICE Candidate Trickle

  2. 房间管理模型:两人房间的创建、加入、离开

  3. PeerConnection 配置:ICE Server、编解码器偏好、带宽限制

  4. 错误处理:ICE 连接失败回退、浏览器兼容性处理

  5. UI/UX 模式:本地预览、远端视频显示、通话控制

参考资料