编译 WebRTC 的 Window 环境工程

系统要求

  • Win10及以上64位系统。
  • 内存至少8G,当然越大越好。
  • 至少100G磁盘空间(NTFS格式),不能是FAT32,因为会生成大于4G的文件。
  • cmd 窗口

Visual Studio安装

要求 Visual Studio 2022 (>=17.0.0)。这里我们选择VS2022。安装VS2012时选择自定义安装,必须勾选如下几项:

  • Desktop development with C++组件中10.0.22621.0或以上的Win11 SDK(如果没看到该版本,去左侧Individual components那里勾选)
  • Desktop development with C++组件中MFC以及ATL这两项

安装完VS2022后,必须安装SDK调试工具。打开控制面板->程序与功能,找到刚才安装的最新Windows Software Development Kit,鼠标右键->change。

勾选Debugging Tools For Windows,然后点击change。

depot_tools 安装

depot_tools下载

下载后解压到一个文件夹

将该depot_tools目录的路径加到系统环境变量Path里,然后把该路径移到最前面(避免已安装的python与git造成影响)

下载webrtc 源码

在depot_tools 同级目录的cmd窗口,设置科学上网的代理:

arduino 复制代码
set http_proxy=http://127.0.0.1:7881
set https_proxy=http://127.0.0.1:7881

当然这个代理的地址,你根据你自己的实际情况设置

可以通过下面的cmd命令查看设置:

bash 复制代码
echo %http_proxy% 
echo %https_proxy%

接着执行 gclient 命令,安装编译需要用到的一些工具,比如git以及python。

接着,再设置一些环境变量,设置下我们的VS安装路径以及Windows SDK路径,这里我是安装在C盘。

这里比较重要,执行后面的命令依赖这些环境变量,当关闭串口后,再次执行时候,要重行执行一下这些环境变量命令

ini 复制代码
set vs2022_install=C:\Program Files\Microsoft Visual Studio\2022\Professional
set GYP_GENERATORS=msvs-ninja,ninja
set WindowsSdkVersion=10.0.26100.0 # 替换为您实际安装的版本
set WINDOWSSDKDIR=C:\Program Files (x86)\Windows Kits\10
# 告诉depot_tools使用我们本机的VS进行编译
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

如下是我的目录的截图

然后创建源码目录,cd到要放源码的地方,执行:

bash 复制代码
mkdir webrtc-checkout
cd webrtc-checkout
# 生成.gclient文件
fetch --nohooks webrtc
# 主要是根据DEPS文件下载第三方库
gclient sync

这一过程是个漫长的等待,包括源码,第三方库,以及一些测试的音视频文件资源等,如果因为网络等原因中断了,就再执行gclient sync。如果这一步一直卡着不动,可以执行ctrl+c,然后执行gclient sync

过程可能错误 1

多次 gclient sync 即可

过程可能错误 1

csharp 复制代码
D:\program\webrtc\webrtc-checkout>gclient sync
Updating depot_tools...
WARNING:root:depot_tools recommends setting the following for
optimal Chromium development:

$ git config --global core.autocrlf false
$ git config --global core.filemode false
$ git config --global core.fscache true
$ git config --global core.preloadindex true

You can silence this message by setting these recommended values.

You can allow depot_tools to automatically update your global
Git config to recommended settings by running:
$ git config --global depot-tools.allowGlobalGitConfig true

To suppress this warning and silence future recommendations, run:
$ git config --global depot-tools.allowGlobalGitConfig false
10>WARNING: subprocess '"git" "-c" "core.deltaBaseCacheLimit=2g" "clone" "--no-checkout" "--progress" "https://boringssl.googlesource.com/boringssl.git" "D:\program\webrtc\webrtc-checkout\src\third_party\boringssl\_gclient_src_kvh3kn81"' in D:\program\webrtc\webrtc-checkout failed; will retry after a short nap...
10>WARNING: subprocess '"git" "-c" "core.deltaBaseCacheLimit=2g" "clone" "--no-checkout" "--progress" "https://boringssl.googlesource.com/boringssl.git" "D:\program\webrtc\webrtc-checkout\src\third_party\boringssl\_gclient_src_kvh3kn81"' in D:\program\webrtc\webrtc-checkout failed; will retry after a short nap...
Syncing projects:  53% (29/54) src/third_party/icu
src/third_party/boringssl/src (ERROR)
----------------------------------------
[0:00:10] Started.
[0:00:10]

________ running 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://boringssl.googlesource.com/boringssl.git D:\program\webrtc\webrtc-checkout\src\third_party\boringssl\_gclient_src_kvh3kn81' in 'D:\program\webrtc\webrtc-checkout'

[0:00:11] Cloning into 'D:\program\webrtc\webrtc-checkout\src\third_party\boringssl\_gclient_src_kvh3kn81'...
[0:00:13] remote: Repository not found.
[0:00:13] fatal: repository 'https://github.com/google/boringssl.git.git/' not found
[0:00:21]

删除调D:\program\webrtc\webrtc-checkout\src\third_party\boringssl目录,然后执行

bash 复制代码
git clone https://boringssl.googlesource.com/boringssl D:\program\webrtc\webrtc-checkout\src\third_party\boringssl

手动下载

然后再执行 gclient sync完成效果如下:

还有一种方式,需改webrtc配置的地址:boringssl.googlesource.com/boringssl.g... 去掉后面 .git

然后再执行 gclient sync --reset --force 强制同步一次

编译工程

一. 生成VS工程文件

首先需要生成工程文件。WebRTC默认使用Ninja作为编译系统,Ninja工程文件通过GN生成,由于我们需要使用VS进行代码编辑调试等,所以使用GN生成Ninja工程时需要配置--ide=vs生成VS的工程文件。通过如下命令生成工程文件(Debug编译,工程文件位于out\Default目录下):

scss 复制代码
cd src
# gn gen --ide=vs2022 out/Debug --args="is_debug=true target_os=\"win\" target_cpu=\"x64\""
gn gen --ide=vs2022 out/Default

gn gen --ide=vs2022 out/Debug --args="is_debug=true target_os="win" target_cpu="x64"" 这个复杂一些,可以来指定参数,按需构造,注意引号

这里我遇到了错误

arduino 复制代码
D:\program\webrtc\webrtc-checkout\src>gn gen --ide=vs2022 out/Default
Traceback (most recent call last):
  File "D:\program\webrtc\webrtc-checkout\src\build\toolchain\win\setup_toolchain.py", line 324, in <module>
    main()
  File "D:\program\webrtc\webrtc-checkout\src\build\toolchain\win\setup_toolchain.py", line 270, in main
    env = _LoadToolchainEnv(cpu, toolchain_root, win_sdk_path, target_store)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\program\webrtc\webrtc-checkout\src\build\toolchain\win\setup_toolchain.py", line 189, in _LoadToolchainEnv
    return _ExtractImportantEnvironment(variables)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\program\webrtc\webrtc-checkout\src\build\toolchain\win\setup_toolchain.py", line 67, in _ExtractImportantEnvironment
    raise Exception(
Exception: Path "C:\Program Files (x86)\Windows Kits\10\\include\10.0.26100.0\\um" from environment variable "include" does not exist. Make sure the necessary SDK is installed.
ERROR at //build/toolchain/win/win_toolchain_data.gni:9:7: Script returned non-zero exit code.
      exec_script("//build/toolchain/win/setup_toolchain.py",
      ^----------
Current dir: D:/program/webrtc/webrtc-checkout/src/out/Default/

找不这个版本,那就安装一下:

你也可以修改编译使用的版本,改为你 C:\Program Files (x86)\Windows Kits\10\Include 目录里面你有的版本

生成成功后,如下:

可以在src\out\Default下得到 VS2022的all.sln解决方案文件,如下:

如果需要Release编译,通过如下命令生成工程文件:

ini 复制代码
gn gen --ide=vs2022 out/Default --args="is_debug=false"

如果不想使用默认编译参数,可以使用gn args out/Default --list查看当前编译参数。然后 通过类似如下方式设置:

ini 复制代码
gn gen --ide=vs2022 out/Default --args="use_rtti=true is_clang=false rtc_build_tools=false rtc_include_tests=false rtc_build_examples=false"

二. 编译

生成工程文件后,有两种方式构建工程

1. 使用命令方式

就可以在src目录下执行编译命令:

ninja -C out/Default

2. 使用visual studio 打开

用VS2022打开:

重新生成解决方案后,有很多错误,都是这种:

在cmd验证一下:

说明是ninja 的环境变量不对,在环境变量里面配置一下:

然后再在cmd里面验证一下版本:

sql 复制代码
ninja --version
where ninja

代码更新

后续如需要更新代码,按照如下步骤:

bash 复制代码
git checkout master
git pull origin master
gclient sync

然后参考前面步骤重新生成工程文件,编译即可。

引用WebRTC库

WebRTC编译后会在src\out\Default\obj目录下生成整个WebRTC工程的静态库:webrtc.lib,链接下这个就可以了。

PS:最新版只支持Clang编译器如果VS应用没配置Clang编译器,链接这个webrtc.lib,生成工程文件时需要配置如下参数:
gn gen --ide=vs out/Default --args="is_clang=false use_lld=false"

禁用clang与lld

参考:

Windows平台WebRTC编译

相关推荐
ywf12151 小时前
前端的dist包放到后端springboot项目下一起打包
前端·spring boot·后端
恋猫de小郭2 小时前
2026,Android Compose 终于支持 Hot Reload 了,但是收费
android·前端·flutter
hpoenixf8 小时前
2026 年前端面试问什么
前端·面试
还是大剑师兰特8 小时前
Vue3 中的 defineExpose 完全指南
前端·javascript·vue.js
泯泷8 小时前
阶段一:从 0 看懂 JSVMP 架构,先在脑子里搭出一台最小 JSVM
前端·javascript·架构
mengchanmian9 小时前
前端node常用配置
前端
华洛9 小时前
利好打工人,openclaw不是企业提效工具,而是个人助理
前端·javascript·产品经理
xkxnq9 小时前
第六阶段:Vue生态高级整合与优化(第93天)Element Plus进阶:自定义主题(变量覆盖)+ 全局配置与组件按需加载优化
前端·javascript·vue.js
A黄俊辉A10 小时前
vue css中 :global的使用
前端·javascript·vue.js
小码哥_常10 小时前
被EdgeToEdge适配折磨疯了,谁懂!
前端