当前位置:首页|资讯

webrtc音视频开发实战系列 - windows下编译WebRTC

作者:machh03发布时间:2024-10-27



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可以从这里下载在线安装工具   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


1.2 安装配置Win10 SDK

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


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

指定VS版本

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

  • 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命令:

mkdir checkout
cd checkout
fetch --nohooks webrtc   下载.gclient的源码下载配置文件, gclient是webrtc的源码管理工具
gclient sync   # 主要是根据DEPS文件下载第三方库

  • gclient sync -f

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

2.2 编译工程

首先需要生成工程文件。

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/


2.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。

音视频开发训练营
  •   微信扫描上方二维码关注公众号:音视频开发训练营




Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1