Windows环境下载WebRTC代码
作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音
Google 开源的 WebRTC 库的地址是 https://webrtc.googlesource.com/ 。
他的代码主要是在 src
里面。不过一些第三方依赖有时候会从下面这个地址拉取代码。
https://chromium.googlesource.com/chromium/
我感觉 WebRTC 其实是 Chromium 浏览器的一部分,所以它有一些依赖,其实是在 Chromium 浏览器仓库里面的。包括构建工具,他用的都是 Chromium 的构建工具。
Google 开源的 WebRTC,可以说他主要开源了客户端,因为这是浏览器。但是浏览器的算法,逻辑一样可以用于 SFU 等服务器里面。之前说过,他们都是 Peer。
而且 Google 也参与制定了 WebRTC 的各种标准,有标准的指导,其他平台的实现就不会混乱了。
下面我们开始下载 WebRTC 的代码:
1,打开一个 vs2022 的终端
我们需要用 vs2022 打开一个终端,因为后面生成 vs2022 的解决方案,需要用到 vs2022 的环境变量,如下:
然后我们给这个 命令行终端 设置一下代理,命令如下:
set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890
这个 7890 其实是我的 clash 的端口,如果你是其他的软件,请自行修改。
现在我们使用的命令行终端是既有 vs2022 的环境变量,又能访问 google 的,如下:
echo %lib%
curl https://chromium googlesource.com/chromium/ -o test.html
2,下载 depot_tools 构建工具
depot_tools
其实是 Chromium 开源浏览器的开发工具集来的。他的下载地址如下:
https://storage.googleapis.com/chrome-infra/depot_tools.zip
depot_tools
目录里面有很多的 bat
脚本,我们最常用的是 gclient.bat
跟 fetch.bat
。如下:
fetch.bat
是第一次拉代码的时候用的,而 gclient.bat
是用来后面同步代码的,
为了方便起见,我通常会把 depot_tools
目录加进去 path
环境变量,这样就能在任何地方使用 gclient.bat
跟 fetch.bat
,如下:
set path=E:\depot_tools;%path%;
上面这样是临时设置一下环境变量,我个人不建议永久设置 Windows 的 Path
变量,因为通常会影响其他软件。
然后我们执行 update_depot_tools.bat
更新一下 depot_tools
项目,因为他是压缩包下载的,代码未必是最新的。update_depot_tools.bat
脚本可以把 depot_tools
项目的代码更新到最新,并且下载一些配套的软件。
cd /d E:\depot_tools
.\update_depot_tools.bat
3,创建 WebRTC 目录
我们需要确保 E 盘有 100G 的空闲空间,然后创建一个目录用来放置 WebRTC 的代码。我自己在 E 盘创建一个 windows 目录,专门用来存放 windows 系统的 WebRTC。这样是为了方便我后面创建 Android 用的 WebRTC。
然后我们执行 fetch.bat
开始拉取代码,如下:
cd E:\windows
E:\depot_tools\fetch.bat --nohooks --nohistory webrtc
在拉取代码的过程中,通常会报下面这个错误。
可以看到日志里非常详细指出来发生错误的代码位置。如下:
这个错误其实是下面这条命令导致的。
git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/src/third_party e:\\windows\\src\\_gclient_third_party_w_rejxjb
那应该怎么解决呢?我自己尝试了下面的 3 种方法都解决不了这个问题。
1,把 http.postBuffer
改大
git config --global http.postBuffer 52428800000
2,调整 lowSpeed
git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999
3,把 MTU 从 1500 改成 1400
参考《Windows设置网卡的MTU值》
这个问题应该是我的代理软件的问题,所以我开了一个 香港的 Linux 服务器,单独运行上面这条命令 把 third_party
项目拉下来,然后复制到我本地电脑的 src
目录就行了。
4, gclient syn
,同步代码
third_party
的问题解决之后,我们需要执行一次 gclient sync
,因为前面的 fetch
有报错被中断了,可能有些代码没拉完整。
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
E:\depot_tools\gclient.bat sync
记住,一定要设置 DEPOT_TOOLS_WIN_TOOLCHAIN
为 0,让他用本机的 vs2022 的编译工具,要不它会自己跑去下载 vs2022 的东西,大概率会下载失败。
gclient.bat sync
执行的效果通常是下面这样的,就代表同步成功了。
5,生成 vs2022 解决方案
WebRTC 是使用的 Ninja 作为编译系统,所以我们需要调 gn
命令来生成 Visual Studio 的工程,命令如下:
cd E:\windows\src
gn gen --ide=vs2022 out/Default
然后我们就可以在 Default
目录看到 vs2022 的 all.sln
解决方案了,如下:
读者在操作的时候,一定要确保自己的代理软件的流量是充足的,因为拉一次 WebRTC 代码,基本要消耗 15G 的流量
除了 Google 开源的 WebRTC 库之外, pion 社区也有一个 GO 语言的开源实现,感兴趣的读者可以自行研究,地址如下:
https://github.com/pion/webrtc
常见错误:
- 《error: RPC failed; curl 56 GnuTLS recv error》
- 《error: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.》
- 《Windows设置网卡的MTU值》
参考文章:
- 《Windows平台WebRTC编译》- 剑痴乎
- 《win10下载和编译webrtc源码》- CSDN
- 《WebRTC 开发(二)源码下载与编译》- depthlove
- 《git-config配置查询》