本仓库提供了完整的 WebRTC Android GitHub Actions 编译配置,用于编译包含回声消除(AEC)、降噪(NS)和语音活动检测(VAD)功能的 WebRTC 库。
- ✅ 回声消除 (AEC) - Acoustic Echo Cancellation
- ✅ 降噪 (NS) - Noise Suppression
- ✅ 语音活动检测 (VAD) - Voice Activity Detection
- ✅ 多架构支持 - arm64-v8a, x86_64
- ✅ GitHub Actions 自动编译 - 自动化构建和发布
- ✅ Android 原生音频支持 - OpenSL ES, AAudio
- ✅ Java API 文档 - 完整的 JavaDoc 支持
- ✅ 详细的安装指南 - 包含 Android 集成示例
| 文件 | 说明 |
|---|---|
| .github/workflows/build-webrtc-android.yml | GitHub Actions 工作流配置 |
| docs/ANDROID_INSTALL_GUIDE.md | Android 安装和使用指南 |
编译参数经过精心优化,确保以下核心功能不会被剪裁:
- 回声消除 (AEC) - 包含完整的 AEC 算法
- 降噪 (NS) - 包含多级降噪支持
- 语音活动检测 (VAD) - 包含 VAD 算法
- OpenSL ES - Android 音频 API
- AAudio - Android 高性能音频 API
仅剪裁以下非核心组件:
- 测试代码 (
rtc_include_tests = false) - 示例代码 (
rtc_build_examples = false) - 视频编解码器 (VP8, VP9, H.264, AV1)
- 事件追踪 (
rtc_enable_event_tracing = false)
保留所有核心音频处理功能,确保编译产物功能完整且体积更小。
- 将此仓库 fork 到你的 GitHub 账户
- 进入仓库的 Actions 页面
- 选择 "Build WebRTC for Android" workflow
- 点击 "Run workflow"
- 选择 WebRTC 分支(默认:m120)
- 等待编译完成(约 1-2 小时)
- 在 Actions 页面下载编译产物
你也可以通过推送代码到 main 或 master 分支来触发自动编译。
编译完成后,会在 GitHub Actions 中生成以下文件:
output/
├── arm64/
│ ├── libwebrtc_arm64.aar # ARM64 架构的 AAR 包
│ └── libwebrtc_arm64.a # ARM64 架构的静态库
├── x64/
│ ├── libwebrtc_x64.aar # x86_64 架构的 AAR 包
│ └── libwebrtc_x64.a # x86_64 架构的静态库
├── universal/
│ └── libwebrtc_universal.aar # 包含所有架构的通用 AAR 包
├── javadoc/
│ └── (HTML 文档) # Java API 文档
├── javadoc.zip # Java API 文档压缩包
├── ANDROID_INSTALL_GUIDE.md # Android 安装指南
└── version_info.txt # 编译版本信息
编译产物可以通过以下方式下载:
- Actions 页面 - 在 Actions 运行完成后,点击 "Artifacts" 部分的下载链接
- Releases 页面 - 如果是通过 workflow_dispatch 触发,会自动创建 Release
- 将
libwebrtc_arm64.aar或libwebrtc_universal.aar复制到项目的app/libs/目录 - 在
app/build.gradle中添加依赖:
使用 build.gradle (Groovy DSL):
android {
...
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
implementation(name: 'libwebrtc_arm64', ext: 'aar')
}使用 build.gradle.kts (Kotlin DSL):
android {
...
repositories {
flatDir {
dirs("libs")
}
}
}
dependencies {
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.aar"))))
}或者指定具体的 AAR 文件:
dependencies {
implementation(files("libs/libwebrtc_arm64.aar"))
}GitHub Packages 提供了更方便的依赖管理方式。详细的配置步骤、认证说明和使用示例,请参阅 docs/GITHUB_PACKAGES_GUIDE.md。
注意: 即使是公开的 GitHub 仓库,访问 GitHub Packages 仍然需要认证。这是 GitHub 的安全策略,所有对 GitHub Packages 的访问(包括读取公开包)都需要使用 GitHub Token 进行认证。
快速开始:
- 获取 GitHub Personal Access Token(需要
read:packages权限) - 在项目的
build.gradle或build.gradle.kts中配置 Maven 仓库和认证信息 - 添加 WebRTC 依赖:
// 使用 build.gradle (Groovy DSL)
dependencies {
implementation 'com.webrtc:libwebrtc-arm64:VERSION'
}// 使用 build.gradle.kts (Kotlin DSL)
dependencies {
implementation("com.webrtc:libwebrtc-arm64:VERSION")
}注意: 将 VERSION 替换为实际的版本号,例如:branch-heads-7605-1
编译产物中包含完整的 Java API 文档:
- 下载
javadoc.zip文件 - 解压到任意目录
- 在浏览器中打开
index.html文件 - 浏览完整的 API 文档,包括:
AudioProcessing- 音频处理主类EchoCancellation- 回声消除NoiseSuppression- 降噪VoiceDetection- 语音活动检测AudioDeviceModule- 音频设备模块
如果你需要使用静态库,可以参考以下配置:
# CMakeLists.txt
add_library(webrtc STATIC IMPORTED)
set_target_properties(webrtc PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libwebrtc_${ANDROID_ABI}.a)
target_link_libraries(your_native_lib webrtc)请参考 docs/ANDROID_INSTALL_GUIDE.md 获取详细的 Android 集成指南,包括:
- 完整的安装步骤
- Java/Kotlin 代码示例
- C++ 代码示例
- 权限配置
- ProGuard 配置
- 常见问题解答
import org.webrtc.AudioProcessing;
import org.webrtc.AudioProcessingBuilder;
// 创建 AudioProcessor
AudioProcessing audioProcessing = new AudioProcessingBuilder()
.setEchoCancellation(true)
.build();
// 应用音频处理
audioProcessing.processStream(...);AudioProcessing audioProcessing = new AudioProcessingBuilder()
.setNoiseSuppression(true)
.setNoiseSuppressionLevel(AudioProcessing.NoiseSuppressionLevel.High)
.build();AudioProcessing audioProcessing = new AudioProcessingBuilder()
.setVoiceDetection(true)
.setVoiceDetectionFrameSize(10)
.build();
// 检测语音活动
boolean hasVoice = audioProcessing.hasVoice();以下是一些常用的 WebRTC 分支:
m120- WebRTC M120(稳定版本)m121- WebRTC M121m122- WebRTC M122main- 主分支(最新开发版本)
注意:不同分支可能有 API 变化,建议使用稳定版本。
A: 首次编译(包括下载源码)可能需要 2-4 小时,后续编译约 1-2 小时。
A: 检查以下几点:
- 确保网络连接正常(需要访问 Google 服务器)
- 查看编译日志中的错误信息
- 检查选择的 WebRTC 分支是否存在
A: 编译参数已优化,确保包含所有音频处理功能。你可以通过以下方式验证:
- 检查 AAR 包中的 JNI 库大小(包含完整功能的库通常较大)
- 在代码中尝试调用相关 API
- 查看
version_info.txt文件中的编译信息
A: 检查 Actions 日志,常见原因:
- 网络问题(无法访问 Google 服务器)
- 磁盘空间不足
- 分支不存在
- 超时(GitHub Actions 有时间限制)
A: 典型大小(已移除视频编解码器和 P2P 网络功能):
- ARM64 AAR: 约 8-12 MB
- x86_64 AAR: 约 8-12 MB
- 通用 AAR: 约 15-20 MB
- JavaDoc ZIP: 约 5-10 MB
A: 编译产物中包含 javadoc.zip 文件,解压后在浏览器中打开 index.html 即可查看完整的 Java API 文档。
A: 不支持。本版本专注于音频处理功能,已移除所有视频编解码器和 P2P 网络功能,以减小库体积。
- 网络要求:需要能够访问 Google 服务器(包括 GitHub、chromium.googlesource.com 等)
- 磁盘空间:GitHub Actions 需要至少 30GB 可用空间
- 编译时间:首次编译需要较长时间
- 版本兼容性:不同 WebRTC 分支可能有 API 变化
- 功能完整性:编译参数已优化,确保所有核心功能完整保留
WebRTC 使用 BSD 3-Clause 许可证。编译产物也遵循相同的许可证。
欢迎提交 Issue 和 Pull Request!
如有问题,请提交 Issue。