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

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社区版即可,安装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) 

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环境变量
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版本。

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.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.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的编译速度

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

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/


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1542990.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

昂首资本:欧美货币对的交易智慧

在外汇市场的海洋中,昂首资本的投资者们深知,把握欧美货币对的交易时段是获取收益的关键。欧美货币对,即欧元对美元,因其在欧洲和美国市场的活跃交易时段而备受瞩目。这两个时段不仅交易量巨大,而且价格波动剧烈&#…

【隐私计算篇】利用多方安全计算MPC实现VGG16人脸识别隐私推理

1. 背景介绍 本文主要介绍一种利用多方安全计算MPC技术,实现VGG16的人脸识别模型,侧重于模型推理阶段,目前已经公开专利,因此以下内容的分享都是基于公开材料。该分享涉及到最小化多方安全计算(MPC)以及明密文混合计算的思想&…

JAVA开源项目 甘肃非物质文化网站 计算机毕业设计

本文项目编号 T 043 ,文末自助获取源码 \color{red}{T043,文末自助获取源码} T043,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

python画图|把X轴标签移动到图像顶端

在前述学习过程中,我们一直使用的是默认的轴坐标,X轴往往置于图像的下端。 有时候,也会有将X轴标签放置在图形顶端的需求,今天就一起学习一下。 【1】官网教程 首先打开官网,可以通过下述链接一步直达: …

软考高级:系统安全 -区块链特点:去中心化、开放性、自治性、安全性、匿名性

讲解 生活化例子 想象一下,你和朋友们玩一个共享账本的游戏。每个人都可以在账本上记账,没人可以单独改动账本,大家都可以随时查看账本内容,也不用再信任某个单独的人来管理账本。这就类似于区块链的工作原理。 概念讲解 去中…

基于c++实现的简易shell

代码逻辑 核心思想 解析命令行,拆解命令及其选项创建子进程,在子进程中执行命令如果是前台执行命令,则父进程就阻塞等待子进程中命令执行结束后回收子进程的资源如果是后台执行命令,则父进程不进行阻塞等待,可继续向下…

【机器学习】---神经架构搜索(NAS)

这里写目录标题 引言1. 什么是神经架构搜索(NAS)1.1 为什么需要NAS? 2. NAS的三大组件2.1 搜索空间搜索空间设计的考虑因素: 2.2 搜索策略2.3 性能估计 3. NAS的主要方法3.1 基于强化学习的NAS3.2 基于进化算法的NAS3.3 基于梯度的…

【数据结构】图的遍历

快乐的流畅:个人主页 个人专栏:《C游记》《进击的C》《Linux迷航》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、深度优先遍历1.1 定义1.2 实现 二、广度优先遍历2.1 定义2.2 实现 三、DFS与BFS的对比 引言 前置知识&…

linux用户管理运行级别找回root密码

目录 1.用户的添加 1.1用户添加的基本指令 1.2不指定家目录的名称 1.3指定家目录的名称 2.密码的修改 3.删除目录 3.1删除的两个情况 3.2删除的流程 4.查询用户的信息 5.用户的切换 6.用户组 6.1用户组的概念 6.2创建用户到指定的组 6.3修改用户到其他的组 6.4用…

SpringCloud Alibaba之Sentinel实现熔断与限流

(学习笔记) QPS(Query Per Second):即每秒查询率,是对⼀个特定的查询服务器在规定时间内所处理流量多少的衡量标准。QPS req/sec 请求数/秒,即每秒的响应请求数,也即是最⼤吞吐能⼒…

ATTCK实战系列-Vulnstack三层网络域渗透靶场(一)

ATT&CK实战系列-Vulnstack三层网络域渗透靶场(一) 一、环境搭建1.1 靶场拓扑图1.2 靶场下载链接1.3 虚拟机配置1.3.1 Windows 7 (web服务器)1.3.2 Windows 2008 (域控)1.3.3 Win2k3 (域内主机) 二、外网打点突破2.1 信息搜集2.2 phpmyadmin 后台 Get…

肾癌的多模态预测模型-临床-组织学-基因组

目录 摘要 技术路线 ① lncRNA的预测模型 ②病理 WSI 的分类器 ③临床病理分类器 模型结果 与别的模型比较 同行评审学习 1)使用lncRNA的原因 2)模型临床使用意义 3)关于截止值的使用 摘要 A multi-classifier system integrated…

.NET常见的5种项目架构模式

前言 项目架构模式在软件开发中扮演着至关重要的角色,它们为开发者提供了一套组织和管理代码的指导原则,以提高软件的可维护性、可扩展性、可重用性和可测试性。 假如你有其他的项目架构模式推荐,欢迎在文末留言🤞!&a…

Java_Day04学习

类继承实例 package com.dx.test03; public class extendsTest {public static void main(String args[]) {// 实例化一个Cat对象,设置属性name和age,调用voice()和eat()方法,再打印出名字和年龄信息/********* begin *********/Cat cat ne…

实战OpenCV之直方图

基础入门 直方图是对数据分布情况的图形表示,特别适用于图像处理领域。在图像处理中,直方图通常用于表示图像中像素值的分布情况。直方图由一系列矩形条(也被称为bin)组成,每个矩形条的高度表示某个像素值(…

鸿蒙设置,修改APP图标和名称

1、先看默认的图标和名称 2、打开项目开始设置自己需要的图标和名称 2.1找到 路径src\main\module.json5, 找到 abilities,下的,图标icon、名称label,label可以按住ctrl鼠标左键点击跳转 2.2先修改APP名称 1、ctrl鼠标左键点击…

华为OD机试 - 选修课(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

【C语言零基础入门篇 - 15】:单链表

文章目录 单链表链表的基本概念单链表功能的实现单链表的初始化单链表新结点的创建单链表头插法单链表的输出单链表的查找单链表修改单链表的删除单链表所有数据结点释放源代码 单链表 链表的基本概念 一、什么是链表? 链表是数据结构中线性表的一种,其…

华为OD机试 - 需要打开多少监控器(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(E卷D卷A卷B卷C卷)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加…

软考高级:数据库保持函数依赖和有损无损分解 AI 解读

讲解 生活化例子 想象你经营着一家快餐店,店里有各种商品,你也记录了每天的销量。你有一个表格,记录了「商品名称」、「价格」、「库存数量」、「供应商信息」等数据。最开始,你可能把所有数据都写在一张表上,但时间…