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源码》。

相关推荐
红尘散仙2 天前
浏览器不能监听端口、没有文件系统,凭什么能点对点传文件?
rust·webrtc·webassembly
福大大架构师每日一题3 天前
mediamtx v1.19.3正式发布:认证安全、WebRTC跨域、MoQ稳定性、RTSP与HLS全面升级
安全·ffmpeg·webrtc
hellojackjiang20113 天前
移动端实时音视频聊天框架 RainbowAV v2.2.7发布
webrtc·实时音视频·即时通讯
淡淡的香烟4 天前
Android中WebRTC通信使用
android·webrtc
SendTomo6 天前
send.wang私传网:P2P直连传大文件首选工具
javascript·网络·网络协议·webrtc·p2p
桑榆4166 天前
WebRTC 本地视频文件推流 Demo 搭建指南 (Ubuntu 24.04)
linux·ubuntu·webrtc
音视频牛哥11 天前
WebRTC 能解决低延迟直播吗?为什么 RTSP、RTMP、GB28181 仍然不可替代?
音视频·webrtc·低延迟rtsp播放器·音视频sdk·smartmediakit·低延迟rtmp播放器·低延迟音视频
云栖梦泽在18 天前
稳如狗网络工具箱:IP、DNS、WebRTC、测速、连通性和全球延迟检测工具简明介绍
网络·网络协议·tcp/ip·网络安全·性能优化·webrtc
用户07806253471919 天前
getUserMedia 权限排障实战:浏览器拒绝,不一定是用户点了“拒绝”
nginx·webrtc
某林21222 天前
ROS2 + WebRTC + MQTT 异构系统架构
架构·系统架构·机器人·硬件架构·webrtc·ros2