Webrtc开发实战系列 - win10+vs2022下编译最新webrtc代码

lcyw 2024-10-15 08:33:01 阅读 51

1. 准备起步

操作系统:windows 10

安装 vs2019/vs2022

安装 win10 sdk 19041 一定勾选 Debugging Tools for Windows

科学上网准备代理工具  

磁盘剩余空间至少 30G

推荐用一台干净的机器或者虚拟机来编译WebRTC,安装过python的会出现一些非常棘手的问题,安装depot_tools会安装python,把原来机子上的python删掉最好。

1.1 安装Visual Studio 2022 

VS2022可以从这里下载 

其对应的Win 10 SDK版本为10.0.20348.0,你可以从这里下载

安装visual studio社区版即可,安装VS2022时选择自定义安装,必须勾选如下几项:

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

Desktop development with C++组件中MFC以及ATL这两项

使用下面指令启动下载器:

<code>vs_Community.exe --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended

VS2022相关安装配置如下图:

图片

图片

图片

注意:ATL和MFC一定要安装。

4. 安装VS2022以后,把VS的安装路径设置到环境变量PATH里面

<code>set vs2022_install=C:\Program Files\Microsoft Visual Studio\2022\Professional

1.2 安装配置Win10 SDK

webrtc最新代码要求适用于 Windows 11版本22H2的Windows SDK (10.0.22621) 

1.2.1 通过vs2022安装

控制面板-程序-程序和功能-单个组件找到 Windows SDK (10.0.22621) 

图片

通过vs2022安装的win10 SDK, 还需要安装  安装SDK调试工具,

打开控制面板->程序与功能,找到刚才安装的最新Windows Software Development Kit,鼠标右键->change

图片

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

图片

1.2.2 通过win10 SDK下载器安装

可以在下面链接选择Windows SDK的安装程序,进行下载安装:https://developer.microsoft.com/zh-cn/windows/downloads/sdk-archive/

比如我这里安装到了D:\Windows Kits\10

然后设置 WINDOWSSDKDIR环境变量

<code>set WINDOWSSDKDIR=D:\Windows Kits\10

1.3 配置GIT代理和系统代理

需要搭建梯子进行科学上网, 

下面配置脚本中的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的代理

1.4 安装deppot_tools

1.4.1 下载Depot Tools

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

1.4.2 配置depot_tools 环境变量

C:\webrtc\depot_tools #一定放到第一行

将depot_tools目录添加到环境变量,并且配置DEPOTTOOLSWIN_TOOLCHAIN为0,

这个变量配置后gclient sync会下载buildtools。

配置完成最好重启一下电脑,让环境变量生效。

图片

1.4.3 安装Windows下所需的工具

管理员权限打开cmdcd到depot_tools目录,然后输入gclien 运行gclient命令, 在第一次运行时,gclient 将安装编译所需的所有windows 特定工具,包括 msysgit 和 python等。

图片

如果中间由于网络原因失败的话,多试几次,如果出现:

WARNING: Your metrics.cfg file was invalid or nonexistent. A new one will be created.

这时候就表示ok了


2. 源码编译

2.1 获取webrtc源码

在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

2.2 指定VS版本

有时我们需要使用老版本的VS 编译旧版本的WebRTC源码,此时除了需要在Windows上安装老版本VS外,还需要设置如下环境变量,这样WebRTC才会使用老的VS版本。

<code>set GYP_MSVS_VERSION=2017set 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命令:

<code>mkdir checkout

cd checkout

fetch --nohooks webrtc   下载.gclient的源码下载配置文件, gclient是webrtc的源码管理工具

gclient sync   # 主要是根据DEPS文件下载第三方库

gclient sync -f

如果因为网络等原因中断了,再次执行gclient sync 

2.3 生成VS工程

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  

进入src目录

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.logcode>

生成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.logcode>

我们可以在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的编译速度

执行上面的命令时,会花一些时间,因此我们需要让子弹飞一会儿…… 

2.4 编译

生成工程文件后,就可以在src目录下执行编译命令:

ninja -C output/Debug -j 8

就生成webrtc的库文件。

然后进入 out\Debug 目录,打开 mywebrtc.sln 就是可以调试的vs2022 webrtc 工程。

VS中引入并使用WebRTC库  : https://blog.avdancedu.com/fcd68433/


3 清理及善后

取消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。

参考资料

[1] https://blog.jianchihu.net/windows-webrtc-build.html

[2] https://blog.avdancedu.com/2bafd6cf/


点击下方并微信扫描二维码关注音视频开发训练营



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。