当前位置: 首页 > news >正文

WebRTC(十四):WebRTC源码编译与管理

编译环境

ubuntu20.04

安装编译依赖

sudo apt-get update
sudo apt-get install -y git python2.7 python3 pkg-config g++ libnss3-dev libnspr4-dev libssl-dev libasound2-dev

depot_tools

Git 工具链封装器:统一管理源码拉取、分支切换、依赖同步。

包含核心命令:

  • fetch:拉取项目(WebRTC、Chromium 等)
  • gclient:管理项目依赖(通过 .gclient 文件)
  • gn:生成构建文件(构建系统生成器)
  • ninja:编译器(Google 优化版 Make 替代)
  • 还有:git-cl, git-cache, roll-dep, presubmit, 等
cd /home/webrtc/depot_toolsgit clone https://chromium.googlesource.com/chromium/tools/depot_tools.git# 配置depot_tools路径至环境变量
vim ~/.bashrc# 最后一行添加,保存wq!
export PATH="$PATH:/home/webrtc/depot_tools/depot_tools"# 执行
source ~/.bashrc

WebRTC源码下载

cd /home/webrtc/mkdir src
cd src# 拉取代码
fetch --nohooks webrtc# 同步依赖(包括第三方依赖、build 工具、工具链等)
gclient sync

配置构建选项

cd src./build/install-build-deps.sh
gn gen out/Default

源码编译

ninja -C out/Default

编译成功后,进入out/Default目录,即可查看编译结果。

在这里插入图片描述

编译参数总结

参数名说明示例值
is_debug是否为 Debug 构建true / false
rtc_include_tests是否编译测试代码false(生产时建议关闭)
rtc_use_h264启用 H264 支持true(需额外引入 openh264/ffmpeg)
rtc_enable_protobuf启用 protobuf 支持(部分 API 需要)true
is_component_build是否使用组件构建(生成多个动态库)false(一般推荐 false
use_rtti启用 RTTI(运行时类型识别)true(如你需要 C++ RTTI)
use_custom_libcxx使用自定义 libc++(通常用于 macOS/iOS)false
target_cpu架构目标"x64""arm""arm64"
target_os目标操作系统"linux""win""android""ios"
rtc_include_builtin_audio_codecs是否包含内置音频编解码器true(如需 Opus)
rtc_include_builtin_video_codecs是否包含内置视频编解码器true(如需 VP8/VP9)
rtc_build_examples是否编译 examples(如 peerconnection_client)false
rtc_build_tools是否构建调试工具false
rtc_build_libevent使用 libevent(少见)false

示例

gn gen out/Default --args='
is_debug=false
rtc_include_tests=false
rtc_use_h264=true
rtc_include_builtin_audio_codecs=true
rtc_include_builtin_video_codecs=true
rtc_build_examples=false
target_cpu="x64"
target_os="linux"
use_rtti=true
'

WebRTC源码管理

选择特定版本(稳定/旧版本)

WebRTC 的源码不使用传统 tag,而是依赖 branch-heads 或 commit。

查看分支:

git ls-remote origin refs/branch-heads/*

切换到指定分支(例如 M114):

git checkout branch-heads/5912
gclient sync

同步代码(已有代码更新/拉取)

src/ 目录执行:

gclient sync

可加速或精细控制:

gclient sync --nohooks --no-history --shallow

参数说明:

  • --nohooks: 不执行钩子脚本(如下载工具链)
  • --shallow: 浅拉取,提高速度
  • --no-history: 不拉 commit 历史,节省空间

更新源码至最新版本

cd src
git checkout main
git pull
gclient sync

如果使用的是某个分支(非 main),先确认当前分支是否有更新。

重新运行 hooks(必要时)

如果 DEPS 文件有改动,或者构建工具(如 Clang)需要重新安装:

gclient runhooks

.gclient 文件说明(位于 webrtc-checkout/

这是 depot_tools 管理的依赖列表,类似 mono-repo 的 manifest:

solutions = [{"managed": False,"name": "src","url": "https://webrtc.googlesource.com/src.git","deps_file": "DEPS","custom_deps": {},"custom_vars": {},},
]

使用 Python3(推荐)

目前 WebRTC 的 gclient 支持 Python3:

sudo apt install python3 python3-pip
export DEPOT_TOOLS_UPDATE=0

确保 depot_tools 使用的是系统的 Python3。

依赖 DEPS 管理机制简述

WebRTC 使用 DEPS 文件定义 Git 子模块依赖:

  • 所有依赖以 Git commit pin 定
  • 更新某个依赖需修改 DEPS 文件中的 hash
  • 可以本地替换模块(用于 patch)

例如:

vars = {'chromium_git': 'https://chromium.googlesource.com',
}deps = {'src/third_party/libvpx': Var('chromium_git') + '/webm/libvpx.git@<commit_hash>',
}
http://www.dtcms.com/a/303966.html

相关文章:

  • Webpack 优化策略
  • 如何用即构ZEGO SDK和uni-app开发一款直播带货应用?
  • uniapp 如果进入页面输入框自动聚焦,此时快速返回页面或者跳转到下一个页面,输入法顶上来的页面出现半屏的黑屏问题。
  • 使用JavaScript实现轮播图的任意页码切换和丝滑衔接切换效果
  • uniapp 实现全局变量
  • 【数据结构】用堆实现排序
  • vue3+vite 使用liveplayer加载视频
  • MySQL MVCC:并发神器背后的原理解析
  • 网工知识——OSPF摘要知识
  • [工具类] 分片上传下载,MD5校验
  • echarts饼图
  • 封装$.ajax
  • 一个人开发一个App(数据库)
  • OpenAI Python API 完全指南:从入门到实战
  • 【学习笔记】Lean4 定理证明 ing
  • 7.29错题(zz)史纲 7章 建立新中国
  • Scala实用编程(附电子书资料)
  • Node.js 内置模块
  • AR辅助前端设计:虚实融合场景下的设备维修指引界面开发实践
  • 学习Scala语言的最佳实践有哪些?
  • GCC、glibc、GNU C(gnuc)的关系
  • SkSurface---像素的容器:表面
  • PowerShell脚本自动卸载SQL Server 2025和 SSMS
  • 零基础-动手学深度学习-7.7 稠密连接网络(DenseNet)
  • 景区负氧离子环境监测系统云平台方案
  • 论文阅读:2024 arxiv AutoDefense: Multi-Agent LLM Defense against Jailbreak Attacks
  • 【OpenAI】ChatGPT辅助编码:Spring Boot + Copilot自动生成业务逻辑
  • 【MySQL】从连接数据库开始:JDBC 编程入门指南
  • Java优雅使用Spring Boot+MQTT推送与订阅
  • vue请求golang后端CORS跨域问题深度踩坑