编译 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编译

相关推荐
芥子沫3 小时前
VSCode添加Python、Java注释技巧、模板
开发语言·前端·javascript
cos4 小时前
FE Bits 前端周周谈 Vol.2|V8 提速 JSON.stringify 2x,Vite 周下载首超 Webpack
前端·javascript·css
wfsm5 小时前
pdf预览Vue-PDF-Embed
前端
wangbing11255 小时前
界面规范的其他框架实现-列表-layui实现
前端·javascript·layui
Hurry65 小时前
web应用服务器tomcat
java·前端·tomcat
烛阴6 小时前
Sin -- 重复的、流动的波浪
前端·webgl
北'辰8 小时前
DeepSeek智能考试系统智能体
前端·后端·架构·开源·github·deepseek
前端历劫之路8 小时前
🔥 1.30 分!我的 JS 库 Mettle.js 杀入全球性能榜,紧追 Vue
前端·javascript·vue.js
爱敲代码的小旗9 小时前
Webpack 5 高性能配置方案
前端·webpack·node.js
Murray的菜鸟笔记9 小时前
【Vue Router】路由模式、懒加载、守卫、权限、缓存
前端·vue router