面向 Android Native / C++ 开发方向,涵盖协议原理书籍、libwebrtc 源码学习路径、SFU 服务器项目、以及可直接跑通的 Android Demo。
一、协议原理与入门书籍
入门(浏览器/JS视角,建议先扫一遍建立整体框架)
- 《Getting Started with WebRTC》 (Rob Manson 著) 只要求 HTML/JS 基础,从最简单的音视频通话 Demo 开始,逐步加上文字聊天、文件拖拽共享。篇幅短,不深入底层协议,适合建立整体认知。
- 《Learning WebRTC》 (Dan Ristic 著) 同类型入门书,偏实践。
进阶/系统性
- 《Programming WebRTC》 (Karl Stolley 著,2024年6月出版) 定位"入门到中级",268页,内容较新,系统讲解如何编写向后兼容的实时流媒体应用。
- 《Real-Time Communication with WebRTC》 (Salvatore Loreto & Simon Pietro Romano 著) 偏协议和标准层面。
底层原理(⭐强烈推荐,尤其适合 Native/C++ 方向)
-
《WebRTC for the Curious》 (免费开源)
- 在线阅读:webrtcforthecurious.com/zh/
- GitHub仓库:github.com/webrtc-for-...
- 不是讲某个语言API封装,而是深入讲解 ICE、SCTP、DTLS、SRTP 等底层协议如何协同构成WebRTC技术栈,还有对早期WebRTC实现者的访谈
- 目前没有找到公认质量较高的完整中文译本,建议直接读英文原版(技术文档风格,不难读),或配合浏览器翻译插件辅助阅读
中文资源
- GitHub 上有整理较全的音视频学习资源仓库(搜"audio_video_streaming"类关键词),收录了大量中文技术文章:WebRTC码率预估、ICE建连、SRTP安全机制、SDP媒体协商等实战话题,比较贴近实际业务场景。
二、libwebrtc 源码学习路径(Native/C++核心路线)
市面上专门讲 libwebrtc C++ 源码架构的正式出版书籍很少,这块领域主要靠源码 + 技术博客 + 协议规范拼出来。建议路径:
-
先补协议原理 → 读《WebRTC for the Curious》,理解 ICE agent、SRTP、SCTP、DTLS握手等模块要解决什么问题
-
直接啃 libwebrtc 源码 (官方仓库:
webrtc.googlesource.com/src),按以下顺序看:pc/(PeerConnection核心逻辑,整体建连流程)p2p/(ICE/STUN/TURN,网络穿透部分)media/和modules/rtp_rtcp/---(音视频编解码、RTP/RTCP传输)modules/audio_processing/-------(3A算法:回声消除AEC、降噪NS、自动增益AGC)modules/video_coding/-----------(视频编解码器封装,VP8/VP9/H264)
-
配合中文技术博客理解设计意图(掘金/知乎搜"WebRTC源码分析"、"libwebrtc pc模块解析")
-
尽早自己编译一份 libwebrtc,用调试工具单步跟一遍完整的 offer/answer 建连过程,比看文章直观得多
- 编译指南:
webrtc.org/native-code/development - 建议先在桌面端(Linux/Mac)编译调试,搞懂流程后再迁移到 Android NDK 交叉编译环境
- 编译指南:
三、值得关注的开源项目
1. mediasoup(SFU服务器,推荐深入学习底层实现)
- 仓库:github.com/versatica/m...
- 定位:WebRTC SFU(选择性转发单元),用于多人会议
- C++占比67.3%,核心media worker基于libuv,设计极简、边界清晰
- 不含信令层,需自己实现;有官方demo项目
mediasoup-demo可以快速体验 - 可以在Mac上编译运行(
npm install mediasoup会自动尝试下载预编译二进制,没有则本地编译,需要g++/Python3)
2. Licode(WebRTC通信平台,更"平台化")
- 仓库:github.com/lynckia/lic...
- 架构:erizo(C++核心)+ erizo_controller(Node.js控制层)+ nuve(房间管理API)
- 提供Docker镜像,比mediasoup更快能跑起来一套可用系统
- 定制自由度不如mediasoup
3. signalapp/webrtc(生产环境定制案例参考)
- 仓库:github.com/signalapp/w...
- 这是Signal团队维护的Google官方libwebrtc的Fork,专供他们的 RingRTC 项目使用
- 改动包括:Rust FFI构建系统注入、Android/iOS SDK定制、ICE forking、禁用部分功能(RTP头扩展、部分音频编解码器)、安全补丁
- 注意:这个仓库本身没有教程/Demo,纯粹是底层源码
- 想看实际应用层集成代码,应该看
signalapp/ringrtc(Rust封装WebRTC、Android/iOS调用层)
四、可直接跑通的 Android Demo(实战学习首选)
1. maitrungduc1410/WebRTC-Demo ⭐最推荐
- 仓库:github.com/maitrungduc...
- 同时覆盖 Web、Android、iOS 三端,目前支持1:1通话
- 自带信令服务器代码(Node.js),不用自己猜信令怎么实现
- 三端代码放一起方便对照学习
2. duqian291902259/webrtc-android-apprtc
- 仓库:github.com/duqian29190...
- 基于官方AppRTC示例,作者已编译好.so和.jar文件,可直接用Android Studio打开编译
- 避开了官方WebRTC源码编译(源码约16GB,编译后超30GB)的痛苦
- 配合官方测试站
appr.tc可直接体验房间加入、P2P连接
3. wojta/no-server-webrtc-android(理解SDP/ICE本质原理)
- 仓库:github.com/wojta/no-se...
- 不使用信令服务器,SDP需手动传递(比如邮件)
- 底层调用Chromium自带的libjingle原生库
- 适合想搞懂offer/answer/ICE candidate握手机制本质、不想被信令服务器封装屏蔽细节的场景
五、建议学习路径总结
makefile
第一步:跑通 maitrungduc1410/WebRTC-Demo
→ 快速看到"信令 + 建连 + 音视频"整套流程如何协同工作
第二步:研究 wojta/no-server-webrtc-android
→ 去掉信令服务器封装,搞懂SDP/ICE最原始的交换过程
第三步:读《WebRTC for the Curious》
→ 补齐ICE/SCTP/DTLS/SRTP协议原理
第四步:啃 libwebrtc 官方源码(pc → p2p → media → modules)
→ 配合中文技术博客理解设计意图
→ 自己编译 + 调试,单步跟一遍完整建连流程
第五步(可选,若涉及服务端/多人会议):
深入研究 mediasoup 源码架构,理解SFU核心实现