系统要求
- 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目录的路径加到系统环境变量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
参考: