一、版本介绍
WebRTC源代码地址:webrtc.googlesource.com/src/
WebRTC并没有官方提供的SDK,只有社区库替代或者自己手动编译。
可以采用Infobip 提供的基于 WebRTC 的SDK。由于Infobip并未公布社区版本对应的webrtc版本,infobip-v1.0.43591该版本发布于Dec 18, 2024,目前猜测infobip-v1.0.43591对应的是webrtc的M142分支。
xml
<!-- https://mvnrepository.com/artifact/com.infobip/google-webrtc -->
<dependency>
<groupId>com.infobip</groupId>
<artifactId>google-webrtc</artifactId>
<version>1.0.43591</version>
</dependency>
以下为webrtc分支的具体映射分析及关系对应:
WebRTC 是一个独立的开源项目,但它与 Chromium 项目紧密集成并共享很多基础架构和版本控制体系。
- WebRTC 的核心代码库位于 Chromium 源代码树的
src/third_party/webrtc目录下。 - 这两个项目由同一个团队(Google WebRTC 团队,许多成员同时也是 Chromium 提交者)维护,并且遵循相同的发布周期和版本策略。
因此WebRTC 遵循与 Chromium 相同的版本控制和分支命名规则:
- 共用分支号 : 从 2019 年 12 月开始,WebRTC 不再使用独立的 M-Milestone 分支名(例如
refs/branch-heads/m79),而是直接使用与 Chromium 相同的单调递增的数字分支号 (例如refs/branch-heads/3945)。 - 版本映射 : 可以通过 Chromium Dash 页面查询到具体的数字分支号所对应的 M-Milestone 版本号。
Mxx版本为LTS版本,这里也选用M142版本,即7444分支作为打包分支
PS:在gclient sync命令完成后,自行切换到7444分支。
二、打包流程
基于Ubuntu的打包流程
需求:Ubuntu版本18.04或更高版本;JAVA 11;至少60G磁盘空间;外网VPN
文件结构如图:
| webrtc | ||
|---|---|---|
| --------------> | depot_tools | |
| --------------> | src |
1.安装Depot Tools - 耗时约1分钟
先mkdir新的文件夹webrtc,cd webrtc。开始安装Depot Tools。Depot Tools是Chromium项目的构建工具集,用于管理WebRTC源码。
bash
# 下载depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# 添加到PATH环境变量
export PATH="$PATH:/path/to/depot_tools"
# 建议添加到~/.bashrc中永久生效
echo 'export PATH="$PATH:/path/to/depot_tools"' >> ~/.bashrc
source ~/.bashrc
2. 安装构建依赖 - 耗时约2-3h
在fetch了webrtc源代码之后,可以checkout到7444分支(即M142),然后再执行 gclient sync ,用于同步7444分支的工具依赖,执行gclient sync的期间比较耗时,尽量不要中断,需要等待命令执行完毕,否则后续的安装构建依赖可能会有问题。由于webrtc无国内镜像源,这里依赖外网,耗时较长。
bash
fetch --nohooks webrtc_android
gclient sync
# 安装构建依赖(需要root权限)
sudo ./build/install-build-deps.sh
3. 安装Android相关依赖 - 耗时约1分钟
bash
# 安装Java OpenJDK(WebRTC需要Java 8或11)
sudo apt update
sudo apt install openjdk-11-jdk
4. 配置版本构建环境 - 约5s
由于编译的是M142版本,某些java的API可能过时,编辑过程中会抛出warning中断打包流程。treat_warnings_as_errors=false 为必须,否则编译过程中任何的java的warning都会中断编译。后续还有多个步骤用于取消java warning的修改,防止打包中断。
gn (Generate Ninja) 是 Chromium 和 WebRTC 项目使用的元构建系统(Meta-Build System), 负责决定"构建什么"和"如何构建"(配置阶段),而稍后的 ninja 命令则负责"实际执行编译"(构建阶段)。
lua
gn gen out/android_debug --args='
target_os="android"
is_debug=true
rtc_include_tests=true
# 推荐指定 CPU 架构,例如 arm64 (64位),这是现代设备的标准
target_cpu="arm64"
# 启用 Protocol Buffers 支持,有助于某些日志记录
rtc_enable_protobuf=true
# 启用音频处理模块的调试dump
apm_debug_dump=true
# 添加这一行以禁用将 Java 警告视为错误
treat_warnings_as_errors=false
'
5. 执行编译过程 - 约10-20分钟
M142分支采用autoninja命令用于编译。
autoninja是一个智能封装脚本(wrapper script),它内部调用了实际的 ninja 构建工具。
-C out/android_debug这个参数告诉 autoninja 进入 out/android_debug 目录,并在那里查找之前由 gn gen 生成的 build.ninja 文件来执行构建任务。
Chromium/WebRTC 构建系统从纯本地 Ninja 切换到支持远程执行的 Siso,autoninja 充当了一个兼容层。它会自动决定使用 Ninja 还是 Siso 来执行构建。
bash
autoninja -C out/android_debug
6. 打包Android可用的aar - 耗时约5-10分钟
需要修改打包文件,要求如下:
src/tools_webrtc/android/build_aar.py
python
在src/tools_webrtc/android/build_aar.py文件修改 Build 函数(大约在第 166 行),并修改 gn_args 字典,将 is_debug 和 use_siso 修改为 True 和 False:
src/build/android/gyp/compile_java.py
ini
在src/build/android/gyp/compile_java.py中,--warnings-as-errors修改为
parser.add_argument('--warnings-as-errors',
action='store_true',
default=False, # <-- 确保这里是 False
help='Treats warnings as errors')
然后执行
bash
python3 tools_webrtc/android/build_aar.py --output libwebrtc_custom.aar --arch arm64-v8a
build_aar.py用于收集之前 autoninja 步骤生成的所有必要的组件(包括:编译好的 .so 动态链接库、编译好的 Java .class 文件、Manifest 文件、ProGuard 配置等),并将它们打包成一个标准的 Android 归档文件 ------ .aar ****(Android Archive) 文件。
实测基于7444分支,无任何源码改动打包后的aar文件。可直接替换infobip-v1.0.43591,暂未发现明显问题。 如哪些步骤有问题,欢迎指正讨论