超简单!WebRTC源码编译教程释出!

一、版本介绍

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,暂未发现明显问题。 如哪些步骤有问题,欢迎指正讨论

相关推荐
FinelyYang2 小时前
uniapp+unipush2.0+WebRTC实现h5一对一视频通话
uni-app·音视频·webrtc
赖small强18 小时前
【ZeroRang WebRTC】WebRTC 信令与传输的安全层解析:WSS、DTLS、SRTP
webrtc·sctp·wss·dtls·srtp
qq_310658512 天前
webrtc代码走读(十七)-音频QOS-NetEQ
服务器·网络·c++·音视频·webrtc
txp玩Linux3 天前
rk3568上解析webrtc音频降噪算法处理流程
算法·音视频·webrtc
RTC老炮4 天前
webrtc降噪-WienerFilter源码分析与算法原理
算法·webrtc
赖small强4 天前
【ZeroRange WebRTC】Amazon Kinesis Video Streams WebRTC initSignaling() 技术深度解析
websocket·webrtc·stun·kinesis·initsignaling
红米饭配南瓜汤4 天前
WebRTC 码率预估(1) - 接收端 TransportFeedback 生成和发送流程指南
网络·音视频·webrtc·媒体
metaRTC4 天前
webRTC IPC客户端Flutter版编程指南
flutter·webrtc·ipc
ZEGO即构开发者5 天前
WebRTC 实战:用即构 SDK 搭建 Web 端 1v1 视频通话(含完整流程与 Demo)
前端·音视频·webrtc