操作系统:windows 10
安装 vs2019/vs2022
安装 win10 sdk 19041 一定勾选 Debugging Tools for Windows
科学上网准备代理工具
磁盘剩余空间至少 30G
推荐用一台干净的机器或者虚拟机来编译WebRTC,安装过python的会出现一些非常棘手的问题,安装depot_tools会安装python,把原来机子上的python删掉最好。
VS2022可以从这里下载在线安装工具 https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=community&rel=17
其对应的Win 10 SDK版本为10.0.22621.0,你可以从这里下载 https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/
VS2012安装visual studio社区版即可,安装VS2012时选择自定义安装,必须勾选如下几项:
Desktop development with C++组件中10.0.22621.0或以上的Win11 SDK(如果没看到该版本,去左侧Individual components那里勾选)
Desktop development with C++组件中MFC以及ATL这两项
使用下面指令启动在线安装工具:
vs_Community.exe --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended
VS配置如下图
注意:ATL和MFC一定要安装,否则后面使用ninja编译的时候,就会报错。
4. 安装VS2022以后,把VS的安装路径设置到环境变量PATH里面
set vs2022_install=C:\Program Files\Microsoft Visual Studio\2022\Professional
webrtc最新代码要求适用于 Windows 11版本22H2的Windows SDK (10.0.22621)
通过vs2022安装
在控制面板-程序-程序和功能-单个组件,找到 Windows SDK (10.0.22621)
通过vs2022安装的win10 SDK, 还需要安装 安装SDK调试工具,
打开控制面板->程序与功能,找到刚才安装的最新Windows Software Development Kit,鼠标右键->change
勾选Debugging Tools For Windows,然后点击change
通过win10 SDK下载器安装
可以在下面链接选择Windows SDK的安装程序,进行下载安装:https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/
比如我这里安装到了D:\Windows Kits\10
然后设置 WINDOWSSDKDIR环境变量
set WINDOWSSDKDIR=D:\Windows Kits\10
需要搭建梯子进行科学上网,
下面配置脚本中的7890端口,是某机场进行科学上网的代理端口.
#1.设置Git的代理 git bash里执行:全局方法
git config --global http.proxy 127.0.0.1:7890
git config --global https.proxy 127.0.0.1:7890
git config --global core.gitproxy 127.0.0.1:7890
# 设置系统代理 cmd命令行执行:如果是VPN,就不用这样设置了
set http_proxy=http://127.0.0.1:7890
set https_proxy=http://127.0.0.1:7890 //(不是 https)是关键!!!
# 添加系统环境变量 DEPOT_TOOLS_WIN_TOOLCHAIN=0
set DEPOT_TOOLS_WIN_TOOLCHAIN = 0
设置当前cmd窗口代理上网,如果cmd窗口关闭了重开得重新设置。
编译完webrtc之后,记得要取消git的代理
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
C:\webrtc\depot_tools #一定放到第一行
将depot_tools目录添加到环境变量,并且配置DEPOTTOOLSWIN_TOOLCHAIN为0,
这个变量配置后gclient sync会下载buildtools。
配置完成最好重启一下电脑,让环境变量生效。
管理员权限打开cmd,cd到depot_tools目录,然后输入gclien 运行gclient命令, 在第一次运行时,gclient 将安装编译所需的所有windows 特定工具,包括 msysgit 和 python等。
如果中间由于网络原因失败的话,多试几次,如果出现:
WARNING: Your metrics.cfg file was invalid or nonexistent. A new one will be created.
这时候就表示ok了
在2020-01-15的时候,也就是从webrtc M80版本开始,webrtc代码中的分支名称从M80改成了分支号(80是Chromium版本, 分支号是一个单调递增的Chromium分支号码,例如M80对应3987)
最新版本号与代码分支对应关系:
https://chromiumdash.appspot.com/branches
120 m120 WebRTC 6099
webrtc / src.git / refs/branch-heads/6099
有时我们需要使用老版本的VS 编译旧版本的WebRTC源码,此时除了需要在Windows上安装老版本VS外,还需要设置如下环境变量,这样WebRTC才会使用老的VS版本。
set GYP_MSVS_VERSION=2017
set GYP_MSVS_OVERRIDE_PATH=D:\Program Files\Microsoft Visual Studio\2017\Community
webrtc代码 下载完成之后,可以通过查看vs_toolchain.py文件, 看是否支持新版本msvc。
E:\webrtc\checkout\src\build\vs_toolchain.py
MSVS_VERSIONS = collections.OrderedDict([
('2022', '17.0'), # Default and packaged version of Visual Studio.
('2019', '16.0'),
('2017', '15.0'),
])
若支持,直接配置GYP_MSVS_VERSION系统变量就好。
完成以上步骤之后,我们开始拉取代码。先创建一个文件夹,再执行fetch命令:
mkdir checkout
cd checkout
fetch --nohooks webrtc 下载.gclient的源码下载配置文件, gclient是webrtc的源码管理工具
gclient sync # 主要是根据DEPS文件下载第三方库
gclient sync -f
如果因为网络等原因中断了,再次执行gclient sync
首先需要生成工程文件。
WebRTC默认使用Ninja作为编译系统,Ninja工程文件通过GN生成,由于我们需要使用VS进行代码编辑调试等,所以使用GN生成Ninja工程时需要配置--ide=vs生成VS的工程文件。通过如下命令生成工程文件(Debug编译,工程文件位于out\Default目录下):
编译之前再次检查一下相关环境变量:
//我的环境配置
set GYP_MSVS_VERSION=2022
set DEPOT_TOOLS_UPDATE=0
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set vs2022_install=D:\Program Files\Microsoft Visual Studio\2022\Community
set GYP_MSVS_OVERRIDE_PATH=D:\Program Files\Microsoft Visual Studio\2022\Community
set GYP_GENERATORS=msvs-ninja,ninja
生成VS工程
cd d:\webrtc\src
生成32位debug
gn gen output/Debug --ide=vs2022 --sln=mywebrtc --args="use_lld=false is_debug=true rtc_use_h264=true is_component_build=true target_cpu=\"x86\" enable_nacl=false" >>build.log
生成64位debug
gn gen output/Debug --ide=vs2022 --sln=mywebrtc --args="use_lld=false is_debug=true rtc_use_h264=true target_cpu=\"x64\"">> build.log
我们可以在src\out\Debug目录
下得到 VS2022的mywebrtc.sln解决方案文件。
如果要生成release的 设置is_debug=false
上述 gn 中的几个参数含义如下(可以查看源码中的gn文件了解细节):
–target,顾名思义,生成x64版本的WebRTC库
–ide,生成VS工程文件
–args,编译时的一些配置参数
is_debug,为true编译出Debug版本;为false编译出Release版本
rtc_enable_protobuf,是否使用protobuf,使用可将其设置为true
use_custom_libcxx,WebRTC默认使用的是libc++库,而我们在Windows上使用的是libstdc++库,所以需要将其设置为false
symbol_level,编译出的WebRTC库是否带符号表,这个数据量很大,会影响运行速度,所以一般设置为0,表示编译出的WebRTC不带符号表
rtc_include_tests,编译WebRTC时是否编译测试用例,如果为false则不编译,这样可以大大加快WebRTC的编译速度
执行上面的命令时,会花一些时间,因此我们需要让子弹飞一会儿……
生成工程文件后,就可以在src
目录下执行编译命令:
ninja -C output/Debug -j 8
就生成webrtc的库文件。
然后进入 out\Debug 目录,打开 mywebrtc.sln 就是可以调试的vs2022 webrtc 工程。
VS中引入并使用WebRTC库 : https://blog.avdancedu.com/fcd68433/
取消G代理
# 还原代理
git config --global --unset http.proxy
git config --global --unset https.proxy
git config --global --unset core.gitproxy
# 系统还原
set HTTP_PROXY=
set HTTPS_PROXY=
以上是windows系统上使用vs2022编译webrtc源码的全部内容。
本系列下一章节,我们将使用本节生成的vs2022工程,来断点调试webrtc源码,解决相关bug, 并跑通example/peerconnection相关demo。
微信扫描上方二维码关注公众号:音视频开发训练营