万事开头难啊,webRTC配置过程中遇到的问题多种多样,有些问题很难搜索到,因此我记录下来供自己参考。

写在前面的话

鉴于WebRTC更新太快,所以网上很多编译方法都失效了,所以如果你看到是几年前的文章,就没必要较真了。本文写作时间为2020年9月16日,WebRTC为当前最新版本。请诸君参考。(另,本人所在地为HK,因此不需要稳定的梯子,希望大家能找到稳定的梯子。)

1.准备

a) Win 10 64bit 1909

b) Visual Studio 2019 Community 16.7.30503.244

c) Windows 10 SDK
Windows 10.0.19041.1

d) Python

Python 3.8.5 64bit,编译过程中需添加到Path环境变量

f) depot_tools
depot_tools是包含下载、编译的相关工具,需要先下载并配置它,才能继续后面的操作。
下载地址:depot_tools

下载后解压,并将解压好的depot_tools目录添加到path系统环境变量中,如下图所示:

2 环境变量配置

有大量的环境变量需要配置,如果在cmd中set需要保持该窗口。一般在系统环境变量编辑里比较简单方便。
最开始我的设置如下:

DEPOT_TOOLS_UPDATE=0                                 #不更新depot_tools
DEPOT_TOOLS_WIN_TOOLCHAIN=0                          #编译时使用本机VS工具链
GYP_MSVS_VERSION = 2019                              #指定VS版本
GYP_MSVS_OVERRIDE_PATH = C:\Program Files (x86)\Microsoft Visual Studio\2019\Community  #vs安装路径,替换成自己的
GYP_GENERATORS=msvs-ninja,ninja                      #使用ninja编译

Error
depot_tools/python3_bin_reldir.txt: No such file or directory
failed to determine Python version

我认为是环境变量阻止了其在Windows下的引导,因此删去DEPOT_TOOLS_UPDATE=0 的环境变量即可.

3.获取WebRTC源码

接着执行gclient命令,安装编译需要用到的一些工具,比如git以及python。

其他的环境变量我们已经在前文设置,无需通过cmd进行设置,这是为了我自己的方便,如果对于环境变量有要求,请在cmd自行设置,例:

set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community 
set GYP_GENERATORS=msvs-ninja,ninja
# 告诉depot_tools使用我们本机的VS进行编译
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

然后cd到要放源码的地方(要遵守前面说的磁盘要求),执行:

mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync

这一过程的时间比较长,包括源码以及一些测试的音视频文件资源等。如果没有稳定快速的梯子需要等待较长时间。

如果因为网络等原因中断了,就再执行gclient sync。如果这一步一直卡着不动,可以执行ctrl+c,然后执行gclient sync

4.编译

生成VS2019工程文件:

cd src
gn gen --ide=vs out/Default

可以在src\out\Default\ 下得到 all.sln解决方案文件。

如果不想使用默认编译参数,可以使用gn args out/Default --list查看当前编译参数,通过类似如下方式设置:
gn gen --ide=vs out/Default --args=“use_rtti=true is_clang=false rtc_build_tools=false rtc_include_tests=false rtc_build_examples=false”

接着执行编译命令:

ninja -C out/Default

代码更新

git checkout master
git pull origin master
gclient sync

引用WebRTC库

WebRTC编译后会在src\out\Default\obj目录下生成整个WebRTC工程的静态库:webrtc.lib,链接下这个就可以了。