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官网:

"支持" -> "源代码库":

按照提示执行命令:

bash 复制代码
git clone https://webrtc.googlesource.com/src

即可下载WebRTC源码:

下载(克隆)时出现提示:"Updating files:100%....done."即表示下载WebRTC源码完成:

但使用这种方式之后执行同步"gclient sync"大概率是会失败的,即使能访问外网也可能会失败,而且使用这种方式同步耗时非常久。可能出现的情况是辛辛苦苦同步了十几个小时,突然网络不好,执行同步中断了,于是之前的操作全白费了,又得重头开始同步了,所以国内不太推荐这种方式。

(二)从声网提供的镜像下载WebRTC源码

国内推荐这种方式。

浏览器访问 WebRTC 国内镜像 ,按照提示操作即可:

这里再简单讲一下从声网提供的镜像下载WebRTC源码的方法。

首先在我们需要存贮WebRTC源码的目录,新建.gclient文件:

.gclient文件中输入以下内容:

cpp 复制代码
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源码了:

bash 复制代码
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目录,执行命令:

bash 复制代码
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。):

bash 复制代码
gclient runhooks
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

重新同步

bash 复制代码
gclient sync

再次执行命令:

bash 复制代码
gn gen out/Default

这时报错应该就会消失。执行成功时输出如下:

上面操作都成功后执行命令:

bash 复制代码
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成功了:

七、调试WebRTC源码

见《Windows下调试WebRTC源码》。

相关推荐
换个昵称都难1 天前
webrtc源码解析概要介绍
webrtc
换个昵称都难1 天前
WebRTC 完整调用流程(前端纯 JS 实现,最简可运行)
webrtc
换个昵称都难2 天前
webrtc 拥塞控制GCC 和PCC
webrtc
Cxiaomu2 天前
React接入WebRTC实时视频实践
react.js·音视频·webrtc
AndyHuang19762 天前
WebRTC 强制 Relay 模式下 TCP 重连失败深度排查与优化实战
webrtc
换个昵称都难2 天前
webrtc pacing 平滑发包模块
webrtc
换个昵称都难2 天前
webrtc 音频混音介绍
音视频·webrtc
换个昵称都难3 天前
webrtc QOS-RemoteBitrateEstimator接收端带宽估计(1)
webrtc
换个昵称都难3 天前
webrtc QOS-RemoteBitrateEstimator接收端带宽估计-四个实例(2)
webrtc
都在酒里3 天前
【极致低延时】香橙派部署 MediaMTX 实现 WebRTC 推流,延时仅 500-800ms,比局域网 ffmpeg 拉流快近 10 倍!(附踩坑全记录)
linux·arm开发·ffmpeg·webrtc·orangepi·嵌入式软件