引言

WebRTC 简介

WebRTC(Web Real-Time Communication)是一个支持网页和移动端进行实时音视频通信的开源项目,由 Google 发起。它提供了 点对点(Peer-to-Peer)音视频通话数据通道传输 等功能,无需额外插件即可在浏览器和移动应用中实现实时通信。

WebRTC 的核心组件包括:

  • MediaStream / MediaTrack:捕获和管理本地音视频流。
  • PeerConnection:实现点对点连接,负责音视频数据的传输和网络穿透。
  • DataChannel:支持点对点的数据传输,可用于文件、消息或控制信息。
  • ICE / STUN / TURN:实现 NAT 穿透和可靠的连接建立。

WebRTC 的特点:

  • 低延迟实时通信(一般延迟在几十毫秒到几百毫秒)
  • 开源免费,跨平台支持(Web、Android、iOS)
  • 提供强大的加密和安全机制(SRTP、DTLS)

Android 上使用 WebRTC 的优势

在 Android 平台上使用 WebRTC 开发音视频应用具有以下优势:

  1. 跨平台兼容性 WebRTC 提供统一的 API,Android、iOS 和 Web 端可以实现互通。
  2. 无需第三方插件 与传统的实时通信方案相比,WebRTC 不依赖外部 SDK 即可完成音视频通信,减少了依赖和安全风险。
  3. 高性能与低延迟 Android WebRTC SDK 对音视频采集、编码、传输和渲染进行了优化,可实现流畅的实时通信体验。
  4. 灵活的网络支持 内置 ICE、STUN、TURN 支持 NAT 穿透,能够在复杂网络环境下稳定连接。
  5. 丰富的功能扩展性 支持多人通话(Mesh/SFU)、数据通道、屏幕共享、视频特效等高级功能,可满足各种业务需求。

文档目标与适用人群

文档目标: 本指南旨在帮助开发者快速理解并掌握在 Android 平台上使用 WebRTC 开发实时音视频应用的流程,包括:

  • 环境搭建与依赖管理
  • 基础音视频通话实现
  • 信令交互与网络处理

适用人群

  • Android 开发工程师:有一定 Android 开发基础,希望在应用中集成实时音视频功能。
  • RTC 技术爱好者:想了解 WebRTC 原理及在移动端的实现方式。
  • 产品/架构设计人员:需要评估 WebRTC 在移动端应用中的可行性和优势。

基础概念

PeerConnection

PeerConnection 是 WebRTC 的核心,用于在两个端点之间建立 点对点(P2P)连接,负责音视频数据和数据通道的传输。

主要功能:

  • 管理本地和远程的音视频轨道(MediaStream/Track)
  • 处理网络连接与 NAT 穿透(ICE、STUN、TURN)
  • 发送和接收 SDP 信息(Offer/Answer)
  • 支持数据通道(DataChannel)

SDP(Session Description Protocol)

SDP 是 WebRTC 中用于 描述媒体会话信息 的协议,包括媒体格式、编解码器、网络参数等。

主要作用:

  • 协商音视频编码格式
  • 传递 ICE Candidate 信息
  • 在 Offer/Answer 流程中交换连接信息

ICE Candidate

ICE(Interactive Connectivity Establishment)用于 帮助端点穿透 NAT/防火墙建立连接

概念:

  • Candidate:候选网络地址(IP + 端口),可通过 STUN/TURN 获取
  • 在 PeerConnection 中,ICE Candidate 会不断收集并发送给对端
  • 对端收到 Candidate 后添加到自己的 PeerConnection

理解:统一 STUN 和 TURN,自动选择最佳连接路径,ICE 就是连接策略的“大脑”,让连接尽量 P2P,如果不行才走 TURN。

STUN (Session Traversal Utilities for NAT)

  • 作用:帮助客户端获取自己在公网的 IP 和端口。
  • 原理
    1. 客户端向 STUN 服务器发送请求
    2. STUN 服务器返回公网可访问的 IP:port
  • 用途:尽量使用 P2P 直连,减少中继服务器负载。

TURN (Traversal Using Relays around NAT)

  • 作用:当 P2P 直连失败时,通过中继服务器转发流量。
  • 特点
    • 可靠,但带宽成本高
    • 可以保证复杂 NAT 或防火墙环境下通信
  • 注意:通常部署在云服务器,需要足够带宽。

信令

信令(Signaling)是 建立 WebRTC 连接的前置通信机制,用于交换 SDP、ICE Candidate 等信息。

特点:

  • WebRTC 本身不定义信令协议,开发者可自由选择实现方式
  • 常用方式:WebSocket、HTTP、Socket.IO
  • 信令流程一般包括:
    1. 客户端 A 发送 Offer 给信令服务器
    2. 服务器转发给客户端 B
    3. 客户端 B 回复 Answer
    4. 双方交换 ICE Candidate

DataChannel

  • WebRTC 不只是音视频,还可以传输任意二进制数据(文件、游戏数据等)
  • 特性:
    • P2P 低延迟
    • 类似 TCP/UDP(可选可靠性)