Windows环境下载WebRTC代码

作者:罗上文,微信:Loken1,公众号:FFmpeg弦外之音

Google 开源的 WebRTC 库的地址是 https://webrtc.googlesource.com/

0-1

他的代码主要是在 src 里面。不过一些第三方依赖有时候会从下面这个地址拉取代码。

https://chromium.googlesource.com/chromium/

我感觉 WebRTC 其实是 Chromium 浏览器的一部分,所以它有一些依赖,其实是在 Chromium 浏览器仓库里面的。包括构建工具,他用的都是 Chromium 的构建工具。

Google 开源的 WebRTC,可以说他主要开源了客户端,因为这是浏览器。但是浏览器的算法,逻辑一样可以用于 SFU 等服务器里面。之前说过,他们都是 Peer。

1-5

而且 Google 也参与制定了 WebRTC 的各种标准,有标准的指导,其他平台的实现就不会混乱了。


下面我们开始下载 WebRTC 的代码:

1,打开一个 vs2022 的终端

我们需要用 vs2022 打开一个终端,因为后面生成 vs2022 的解决方案,需要用到 vs2022 的环境变量,如下:

1-3-2

然后我们给这个 命令行终端 设置一下代理,命令如下:

set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0.0.1:7890

这个 7890 其实是我的 clash 的端口,如果你是其他的软件,请自行修改。

1-4

现在我们使用的命令行终端是既有 vs2022 的环境变量,又能访问 google 的,如下:

echo %lib%
curl https://chromium googlesource.com/chromium/ -o test.html

1-5


2,下载 depot_tools 构建工具

depot_tools 其实是 Chromium 开源浏览器的开发工具集来的。他的下载地址如下:

https://storage.googleapis.com/chrome-infra/depot_tools.zip

1-2

depot_tools 目录里面有很多的 bat 脚本,我们最常用的是 gclient.batfetch.bat。如下:

1-3

fetch.bat 是第一次拉代码的时候用的,而 gclient.bat 是用来后面同步代码的,


为了方便起见,我通常会把 depot_tools 目录加进去 path 环境变量,这样就能在任何地方使用 gclient.batfetch.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

在拉取代码的过程中,通常会报下面这个错误。

1-6

可以看到日志里非常详细指出来发生错误的代码位置。如下:

1-7

这个错误其实是下面这条命令导致的。

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 执行的效果通常是下面这样的,就代表同步成功了。

1-8


5,生成 vs2022 解决方案

WebRTC 是使用的 Ninja 作为编译系统,所以我们需要调 gn 命令来生成 Visual Studio 的工程,命令如下:

cd E:\windows\src
gn gen --ide=vs2022 out/Default

然后我们就可以在 Default 目录看到 vs2022 的 all.sln 解决方案了,如下:

1-9


读者在操作的时候,一定要确保自己的代理软件的流量是充足的,因为拉一次 WebRTC 代码,基本要消耗 15G 的流量

t_3


除了 Google 开源的 WebRTC 库之外, pion 社区也有一个 GO 语言的开源实现,感兴趣的读者可以自行研究,地址如下:

https://github.com/pion/webrtc

常见错误:

  1. error: RPC failed; curl 56 GnuTLS recv error
  2. error: RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received.
  3. Windows设置网卡的MTU值

参考文章:

  1. Windows平台WebRTC编译》- 剑痴乎
  2. win10下载和编译webrtc源码》- CSDN
  3. WebRTC 开发(二)源码下载与编译》- depthlove
  4. git-config配置查询

版权所属 xianwanzhiyin.net 罗上文 2023 all right reserved,powered by Gitbook该文件修订时间: 2024-01-08 01:12:45

results matching ""

    No results matching ""