Windows下编译WebRTC源码
一、开发环境要求
准备一台64位的win10或win11(我用的是win11)电脑。最好是一台纯净的、没有安装过其它软件的Windows主机,避免已安装的软件和库对编译造成影响。
然后最好预留超过100G的硬盘空间。因为编译WebRTC时会产生大量的临时文件需要空间。
磁盘格式要为NTFS不能为FAT32,因为FAT32不支持4GB以上的文件,而WebRTC中有文件是大于4G的。
二、卸载Python
depot_tools已经包含了自己的Python解释器。如果Windows主机之前已经安装了Python,需要卸载原来的Python避免对之后编译WebRTC造成影响。
三、安装depot_tools
参考《Windows下安装depot_tools》安装depot_tools。
四、安装WinSDK和Visual Studio 2019
Visual Studio 2019换成Visual Studio 2022也是可以的。按照网上的教程安装即可,这里就不再赘述了。
五、下载WebRTC源码
下载WebRTC源码有两种途径,一种是从谷歌官方的地址下载,另一种是从声网提供的镜像下载。这里推荐从声网下载。
(一)从谷歌官方的地址下载WebRTC源码
使用这种方式需要有访问外网(科学上网)的能力。
浏览器访问 https://webrtc.org ,进入WebRTC官网:
“支持” -> “源代码库”:
按照提示执行命令:
git clone https://webrtc.googlesource.com/src
即可下载WebRTC源码:
下载(克隆)时出现提示:“Updating files:100%....done.”即表示下载WebRTC源码完成:
但使用这种方式之后执行同步“gclient sync”大概率是会失败的,即使能访问外网也可能会失败,而且使用这种方式同步耗时非常久。可能出现的情况是辛辛苦苦同步了十几个小时,突然网络不好,执行同步中断了,于是之前的操作全白费了,又得重头开始同步了,所以国内不太推荐这种方式。
(二)从声网提供的镜像下载WebRTC源码
国内推荐这种方式。
浏览器访问 WebRTC 国内镜像 ,按照提示操作即可:
这里再简单讲一下从声网提供的镜像下载WebRTC源码的方法。
首先在我们需要存贮WebRTC源码的目录,新建.gclient文件:
.gclient文件中输入以下内容:
solutions = [{ "name" : "src","url" : "https://webrtc.bj2.agoralab.co/webrtc-mirror/src.git@65e8d9facab05de13634d777702b2c93288f8849","deps_file" : "DEPS","managed" : False,"safesync_url": "","custom_deps": {},},
]
target_os = ["win"]
执行下面命令,让WebRTC源码和它所依赖的第三方库都同步到本地计算机上。执行gclient sync后就不需要再通过git clone克隆WebRTC源码了:
gclient sync
如果执行gclient sync时报错:“unable to access 'https://chromium.googlesource.com/chromium/tools/depot_tools.git/':Failed to connect to chromium.googlesource.comport 443:Timedout”。使用科学上网工具让自己的电脑拥有访问外网的能力,重新执行gclient sync:
如果控制台输出:“Syncing projects:100%...,done.表示”同步成功了:
可以发现WebRTC源码已经被成功下载到src目录中了:
六、编译WebRTC源码
Chromium和WebRTC是通过gn和ninja进行编译的,gn把.gn文件转换成.ninja文件,然后ninja根据.ninja文件把源码生成目标程序。gn和ninja的关系就与cmake和make的关系差不多。
进入src目录,执行命令:
gn gen out/Default
可能会报错:“Toolchain is out of date.Run "gclient runhooks" to update the toolchain,or set DEPOT_TooLS_WIN_ToOLCHAIN=O to use the locallyinstalledtoolchain.”:
这时候按照提示执行命令(如果之后还需要执行gn命令,那每一次重新打开控制台都要重新执行:set DEPOT_TOOLS_WIN_TOOLCHAIN=0。):
gclient runhooks
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
重新同步
gclient sync
再次执行命令:
gn gen out/Default
这时报错应该就会消失。执行成功时输出如下:
上面操作都成功后执行命令:
ninja -C out/Default
如果报错:“error:'../../resources/audio_processing/test/py_quality_assessment/noise_tracks/city.wav',neededby'py_quality......”。重新同步,再把上述操作重新执行一遍:
执行成功时输出如下:
如果src/out/Default/obj目录下生成了webrtc.lib文件,表示编译WebRTC成功了:
相关文章:
Windows下编译WebRTC源码
一、开发环境要求 准备一台64位的win10或win11(我用的是win11)电脑。最好是一台纯净的、没有安装过其它软件的Windows主机,避免已安装的软件和库对编译造成影响。 然后最好预留超过100G的硬盘空间。因为编译WebRTC时会产生大量的临时文件需…...
【vscode】.dart文件没有错误波浪线
解决方法: 新建一个文件夹,在vscode里打开这个文件夹 在这个文件夹里新建.dart文件后打开即可出现错误波浪线...
OpenharmonyOS+RK3568,【编译烧录】
文章目录 1. 摘要 ✨2. 代码下载 📩3. 编译 🖥️4. 修改&适配 ✂️4.1 编译框架基本概念4.2 vendor & device 目录4.3 内核编译4.3.1 如何修改、适配自己的开发板? 4.4 修改外设驱动 5. 烧录&验证 📋参考 1. 摘要 ✨ …...
从零开始理解 C++ 后端编程中的分布式系统
一、什么是“分布式”? 简单来说,分布式系统就是由“多个计算机(或服务器)”组成的一个大系统,它们通过网络协作完成某个任务,就像一个“团队合作”一样。 想象你开了一家餐馆,最初只有 一个厨房 和 一个服务员,所有订单都在这里处理。随着生意变好,你需要: 开分店…...
基于SpringBoot的篮球竞赛预约平台设计与实现
1.1 研究背景 科学技术日新月异的如今,计算机在生活各个领域都占有重要的作用,尤其在信息管理方面,在这样的大背景下,学习计算机知识不仅仅是为了掌握一种技能,更重要的是能够让它真正地使用到实践中去,以…...
具身系列——PPO算法实现CartPole游戏(强化学习)
完整代码参考: https://gitee.com/chencib/ailib/blob/master/rl/ppo_cartpole.py 执行结果: 部分训练得分: (sd) D:\Dev\traditional_nn\feiai\test\rl>python ppo_cartpole_v2_succeed.py Ep: 0 | Reward: 23.0 | Running: 2…...
小程序与快应用:中国移动互联网的渐进式革命——卓伊凡的技术演进观
小程序与快应用:中国移动互联网的渐进式革命——卓伊凡的技术演进观 在知乎看到很多:“懂王”发布的要把内行笑疯了的评论,卓伊凡必须怼一下,真印证那句话,无知者无畏 一、Web与小程序的技术本质差异 1.1 浏览器渲染…...
Socket 编程 UDP
Socket 编程 UDP UDP 网络编程V1 版本 - echo serverV2 版本 - DictServerV3 版本 - 简单聊天室 补充参考内容地址转换函数关于 inet_ntoa UDP 网络编程 声明:下面代码的验证都是用Windows作为客户端的,如果你有两台云服务器可以直接粘贴我在Linux下的客…...
Lua 基础 API与 辅助库函数 中关于创建的方法用法
目录 基础 API 函数1. lua_len(L, index)2. lua_load(L, reader, data, chunkname, mode)3. lua_newstate(allocator, ud)4. lua_newtable(L)5. lua_newthread(L)6. lua_newuserdata(L, size)7. lua_next(L, index) 辅助库函数(luaL_*)8. luaL_len(L, in…...
YOLOv11改进:利用RT-DETR主干网络PPHGNetV2助力轻量化目标检测
这里写自定义目录标题 YOLOv11改进:利用RT-DETR主干网络PPHGNetV2助力轻量化目标检测1. 介绍2. 引言3. 技术背景3.1 YOLOv11概述3.2 RT-DETR与PPHGNetV23.3 相关工作 4. 应用使用场景5. 详细代码实现5.1 环境准备5.2 PPHGNetV2主干网络实现5.3 YOLOv11与PPHGNetV2集…...
centos7.0无法安装php8.2/8.3
在centos安装php8.2报错 configure: error: *** A compiler with support for C17 language features is required. 配置过程检测到你的系统编译器不支持 C17 语言特性,而 PHP 8.2 的编译需要编译器支持 C17 sudo yum update -y sudo yum install centos-releas…...
工业传动核心部件深度剖析:丝杆升降机与气缸的技术特性及选型指南
在工业自动化技术飞速发展的当下,丝杆升降机与气缸作为关键的直线传动部件,广泛应用于各类机械设备中。对于工程师而言,深入了解它们的技术特性、优缺点及适用场景,是实现高效、精准设备设计的重要前提。本文将从技术原理出发&…...
flask 获取各种请求数据:GET form-data x-www-form-urlencoded JSON headers 上传文件
在 Flask 里,能使用多种方法获取不同类型的请求数据,下面详细介绍常见请求数据的获取方式。 获取查询字符串参数(GET 请求) 查询字符串参数一般在 URL 里,以 ?key1value1&key2value2 这种形式存在。可通过 requ…...
c++_2011 NOIP 普及组 (1)
P1307 [NOIP 2011 普及组] 数字反转 P1307 [NOIP 2011 普及组] 数字反转 - 洛谷 # P1307 [NOIP 2011 普及组] 数字反转 ## 题目描述 给定一个整数 $N$,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零&…...
信息泄露:网站敏感文件泄漏的隐形危机与防御之道
在网络安全领域,信息泄露常被称为“沉默的杀手”。攻击者无需复杂漏洞,仅通过网站无意暴露的敏感文件(如源码备份、配置文件、版本控制记录),即可获取数据库密码、API密钥甚至服务器权限。本文将深入剖析信息泄…...
C++笔记-多态(包含虚函数,纯虚函数和虚函数表等)
1.多态的概念 多态(polymorphism)的概念:通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态),这里我们重点讲运行时多态,编译时多态(静态多态)和运行时多态(动态多态)。编译时多态(静态多态)主要就是我们前面讲的函…...
2025年- H22-Lc130-206. 反转链表(链表)---java版
1.题目描述 2.思路 使用迭代法 (1)定义一个前指针 (2)然后定义两个变量 curr(head),curr.next。 (3)curr和curr.next交换位置(只要当前指针不为空,执行两两交换) 3.代码实现 /*** Definition for singly-…...
智能家居的OneNet云平台
一、声明 该项目只需要创建一个产品,然后这个产品里面包含几个设备,而不是直接创建几个产品 注意:传输数据使用到了不同的power,还有一定要手机先联网才能使用云平台 二、OneNet云平台创建 (1)Temperatur…...
二、shell脚本--变量与数据类型
1. 变量的定义与使用 定义变量:简单直接 在 Shell 里定义变量相当容易: 基本格式: variable_namevalue关键点 ❗:赋值号 的两边绝对不能有空格!这绝对是初学者最容易踩的坑之一 😨,务必留意!…...
GitHub Actions 和 GitLab CI/CD 流水线设计
以下是关于 GitHub Actions 和 GitLab CI/CD 流水线设计 的基本知识总结: 一、核心概念对比 维度GitHub ActionsGitLab CI/CD配置方式YAML 文件(.github/workflows/*.yml).gitlab-ci.yml执行环境GitHub 托管 Runner / 自托管GitLab 共享 Runner / 自托管市场生态Actions Mar…...
穿越数据森林与网络迷宫:树与图上动态规划实战指南
在 C 算法的浩瀚宇宙中,树与图就像是神秘的迷宫和茂密的森林,充满了未知与挑战。而动态规划则是我们探索其中的神奇罗盘,帮助我们找到最优路径。今天,就让我们一起深入这片神秘领域,揭开树与图上动态规划的神秘面纱&am…...
Java学习手册:Spring 生态其他组件介绍
一、微服务架构相关组件 Spring Cloud 服务注册与发现 : Eureka :由 Netflix 开源,包含 Eureka Server 和 Eureka Client 两部分。Eureka Server 作为服务注册表,接收服务实例的注册请求并管理其信息;Eureka Client 负…...
[android]MT6835 Android 移植brctl指令
说明 android默认brctl不支持showmacs选项,需要移植brctl-utils软件包 移除toybox中brctl编译 mssi/external/toybox/Android.bp 将 toybox_symlinks ["[","acpi","base64","basename","blockdev","br…...
安卓基础(悬浮窗分级菜单和弹窗)
initializeViews() 初始化 把全部的按钮都弄出来 // 主菜单按钮ImageButton mainButton floatingMenuView.findViewById(R.id.main_button);// 二级菜单按钮subButtons new ImageButton[3];subButtons[0] floatingMenuView.findViewById(R.id.sub_button_1);subButtons[1]…...
HTTP基础介绍+OSI七层参考模型+HTTP协议介绍
图片来源于网络 图片来源于网络 浏览器 Chrome:谷歌浏览器,推荐 Safari(WebKit):苹果浏览器,iOS,macOS Firefox:火狐浏览器,开源插件特别多(FireBug) IE:Wi…...
【项目实践】boost 搜索引擎
1. 项目展示 boost搜索引擎具体讲解视频 2. 项目背景 对于boost库,官方是没有提供搜索功能的,我们这个项目就是来为它添加一个站内搜索的功能。 3. 项目环境与技术栈 • 项目环境: ubuntu22.04、vscode • 技术栈: C/C、C11、S…...
接口隔离原则(ISP)
非常好,**接口隔离原则(ISP: Interface Segregation Principle)是 SOLID 五大原则中的第四个,它专门解决“一个接口太臃肿”**导致的麻烦。 我来从以下几个维度详细拆解: 🧠 什么是接口隔离原则࿱…...
Leetcode刷题记录29——矩阵置零
题源:https://leetcode.cn/problems/set-matrix-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked 题目描述: 思路一: 💡 解题思路 本题中我们采用如下策略: 第一次遍历整个矩阵,记…...
复刻低成本机械臂 SO-ARM100 组装篇(打螺丝喽)
视频讲解: 复刻低成本机械臂 SO-ARM100 组装篇(打螺丝喽) 组装的视频有很多,参考大佬的《手把手复刻HuggingFace开源神作之Follower机械臂组装,资料已整理》_哔哩哔哩_bilibili,跟着视频做,大体…...
[更新完毕]2025东三省B题深圳杯B题数学建模挑战赛数模思路代码文章教学:LED显示屏颜色转换设计与校正
完整内容请看文章最下面的推广群 已经更新完整的文章代码 基于非线性映射与深度模型的多通道LED显示屏色彩校正 摘要 本研究聚焦于高动态色彩空间下LED显示屏的色彩映射与逐点校正问题,结合非线性回归理论与深度学习模型,构建了一套涵盖BT.2020映射、RG…...
Easy云盘总结篇-登录注册
**说在前面:该项目是跟着B站一位大佬写的,不分享源码,支持项目付费 ** 获取图形验证码 可以看到这里有2两种图形验证码,分为: type0:如上图下面那个,是完成操作后要进行注册的验证码 type1: 如…...
04 基于 STM32 的时钟展示程序
前言 我们经常会看到 各个场合下面有 基于数码管 的时钟程序 比如 在车站, 教室, 办公室 等等 各个场合都有 然后 这里就是做一个 简单的 时钟程序 展示程序 测试用例 每一秒钟更新时间, 然后 迭代更新 天, 时, 分 等等 然后 主流程 基于 天, 时分秒 渲染数码管 #incl…...
音视频开发技术总结报告
音视频开发技术总结报告 一、音视频开发基础 1、音频基础 声音原理 声波特性:频率、振幅、波长人耳听觉范围:20Hz-20kHz声音三要素:音调、音量、音色 数字音频基础 采样率:常见44.1kHz、48kHz、96kHz量化位数:8bit、…...
FastAPI系列13:API的安全防护
API的安全防护 1、HTTPS 强制什么是HTTPS强制如何在FastAPI中实现HTTPS强制 2、CORS跨域资源共享什么是CORS在 FastAPI 中开启 CORS 3、SQL注入防护什么是SQL注入如何在FastAPI中实现SQL注入防护 4、CSRF防护什么是CSRF防护如何在FastAPI中实现CSRF防护 在 FastAPI系列12&…...
每天一道面试题@第五天
1.包装类型的缓存机制了解么? 指部分包装类在创建对象时,会将一定范围内的对象缓存起来,当再次使用相同值创建对象时,优先从缓存中获取,而不是重新创建新对象。【提高性能】【节省内存】 列举几个常见的包装类缓存机…...
Python硬核革命:从微控制器到FPGA的深度开发指南
1. 重新定义硬件开发:Python的颠覆性突破 传统硬件开发长期被C/C++和Verilog/VHDL统治,但Python正通过两条路径改变这一格局: 1.1 微控制器领域的MicroPython革命 完整Python 3.4语法支持,运行在资源受限的MCU上(最低要求:64KB ROM,16KB RAM) 直接内存访问能力,突破…...
WebRTC 服务器之Janus概述和环境搭建
1 概述 Janus 是由 Meetecho 开发的通用 WebRTC 服务器,它为构建 WebRTC 应用程序提供了一个模块化框架。服务器目标:Janus WebRTC 网关被设计为轻量级、通用的 WebRTC 服务器,除了实现以下方法外,它本身不提供任何功能࿱…...
mcp+llm+rag
MCPRAG简介 前言一、MCP是什么?二、MCP工作原理(1. MCP Hosts(主机)(2.MCP Clients(客户端)(3. MCP Servers(服务端)(4. Local Data Sources(本地数据源&…...
Seata RM的事务提交与回滚源码解析
文章目录 前言一、RM提交事务二、RM回滚事务2.1、undo校验逻辑2.2、执行回滚逻辑 总结RM 的事务提交与回滚行为说明(基于 Seata AT 模式)1. 提交阶段(Phase Two Commit)2. 回滚阶段(Phase Two Rollback) 前…...
Ubuntu 24.04 完整Docker安装指南:从零配置到实战命令大全
Ubuntu 24.04 完整Docker安装指南:从零配置到实战命令大全 文章目录 Ubuntu 24.04 完整Docker安装指南:从零配置到实战命令大全1. 安装 Docker2. 配置 Docker 镜像加速器2.1 配置 Docker 镜像源2.2 重启 Docker 服务 3. Docker 常用命令3.1 Docker 常用命…...
设计模式简述(十七)备忘录模式
备忘录模式 描述组件使用 描述 备忘录模式用于将对象的状态进行保存为备忘录,以便在需要时可以从备忘录会对象状态;其核心点在于备忘录对象及其管理者是独立于原有对象之外的。 常用于需要回退、撤销功能的场景。 组件 原有对象(包含自身…...
【ICMP协议深度解析】从网络诊断到安全实践
目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键报文类型说明协议版本对比 二、实战演示环境配置要求核心实验实现实验1:标准ping流程实验2:traceroute路径发现实验3:自定义ICMP…...
《应用开发突围指南:敏捷开发的实战精髓》
如何在应用开发中精准且深入地应用敏捷开发方法呢?让我们一同深入探索。 敏捷开发,绝非仅仅是一种开发流程,更是一种蕴含深刻智慧的理念与思维方式。它与传统开发模式有着本质的区别,传统开发模式如同严谨的线性旅程,…...
【Mytais系列】SqlSession
MyBatis 的 SqlSession 是框架的核心接口之一,它是应用程序与 MyBatis 交互的顶层 API,用于执行 SQL 命令、管理事务和访问数据库。以下是关于 SqlSession 的详细说明: 1. 核心功能 (1) 执行 SQL 操作 增删改查:通过方法如 sele…...
【掌握 DDL】:SQL 中的数据库与表管理
掌握 DDL:SQL 中的数据库与表管理 掌握 DDL:SQL 中的数据库与表管理数据库 DDL创建数据库查看数据库查看所有数据库查看数据库创建语句 进入数据库删除数据库备份数据库备份恢复 查看数据库连接深入理解数据库创建与删除数据库字符集与校验规则 表 DLL创…...
第43周:GAN总结
目录 摘要 Abstract 计算机视觉中的分类 架构变体 损失变体 时间序列中的GAN 连续型GAN 离散型GAN 总结 摘要 本周总结了GAN的变形,主要从图像处理和时间序列生成两部分入手,分别找出了其中比较经典的几种GAN变种模型,简单分析了…...
安卓基础(MediaProjection)
1. Display 类 作用:代表显示设备(手机屏幕、外接显示器)常用方法: display.getRotation() // 获取屏幕方向(横屏/竖屏) display.getRefreshRate() // 获取屏幕刷新率(如&…...
Android Compose 物联网(IoT)UI 组件库封装指南
Android Compose 物联网封装组件 在物联网(IoT)应用开发中,使用Jetpack Compose可以创建现代化、响应式的用户界面。以下是一些针对物联网场景的Compose封装组件思路和实现方法: 常用物联网组件封装 1. 设备状态指示器 Composable fun DeviceStatusI…...
实用在线工具箱OmniTools
简介 OmniTools 是一个自托管的网络应用,提供多种在线工具,旨在简化日常任务。它包含了一系列独立的、小型但实用的工具,涵盖了文件处理、文本操作、网络请求、系统监控等多个方面。 OmniTools 的设计理念是简单、易用、可定制,方…...
【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用。
【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用? 【AI大模型学习路线】第一阶段之大模型开发基础——第三章(大模型实操与API调用)单轮对话与多轮对话调用&…...