WebRTC Native / Android 开发学习资源整理

面向 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++ 源码架构的正式出版书籍很少,这块领域主要靠源码 + 技术博客 + 协议规范拼出来。建议路径:

  1. 先补协议原理 → 读《WebRTC for the Curious》,理解 ICE agent、SRTP、SCTP、DTLS握手等模块要解决什么问题

  2. 直接啃 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)
  3. 配合中文技术博客理解设计意图(掘金/知乎搜"WebRTC源码分析"、"libwebrtc pc模块解析")

  4. 尽早自己编译一份 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核心实现
相关推荐
excel1 小时前
nuxt 3 升级 nuxt 4 报错之 hasInjectionContext
前端
何以解忧,唯有..2 小时前
LangChain 工具调用(Tool Calling)实战指南
java·前端·langchain
软件聚导航2 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
恋猫de小郭3 小时前
看懂大模型架构术语,帮助你理解目前常见的大模型开源架构
前端·人工智能·ai编程
yma163 小时前
通过提示词实现GitHub Pages 和 Nginx 双部署竟然这么简单?
前端
前端 贾公子3 小时前
第09章:上下文与记忆 (2)
java·服务器·前端
可乐鸡翅yeah_3 小时前
第三方接口对接 M3U8 流媒体排坑实战,解决外部服务商流兼容难题
前端·javascript·python·django·html·m3u8·m3u8在线
GoppViper3 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
郑州光合科技余经理4 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php