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成功了: