前言
随着新冠疫情的影响,这两年音视频的需要呈爆发式增长。在音视频畛域中,WebRTC 能够说是一个绕不开宝库,包含了音视频采集、编解码、传输、渲染的全过程。本文次要记录下在 Windows 平台上编译 WebRTC 的全过程。
装置 VS
在 Windows 下开发和调试程序咱们个别都是应用宇宙最强 IDE——Visual Studio,webRTC 也反对咱们生成 VS 的工程。装置 VS 过程不赘述(举荐装置 VS2017 或 VS2019),须要留神的是 VS 装置的时候须勾选上面三项:
- Windows 10 SDK(10.0.18362)或以上的 Windows 10 SDK(m84 版的 WebRTC 源码要求 10.0.18362 或以上 Windows 10 SDK)。
- 用于 x86 和 x64 的 Visual C++ ATL。
- 用于 x86 和 x64 的 Visual C++ MFC。
VS2017 装置选项中不带有 Windows 10 SDK(10.0.18362),能够从从 Win10 SDK 下载,或者间接装置 VS2019。
装置完 VS 后,还须要装置 SDK 调试工具。办法是:
- 关上控制面板 -> 程序与性能,找到 Windows Software Development Kit,鼠标右键 -> 更改。
- 在关上界面中抉择 Change,点击 Next。
- 勾选 Debugging Tools For Windows,点击 Change。
设置代理
因为家喻户晓的起因,要下载 WebRTC 的源码是须要代理工具的。
set http_proxy=127.0.0.1:7777
set https_proxy=127.0.0.1:7777
装置工具 depot_tools
git clone 获取 depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# 装置 Windows 上的编译工具
gclient
将 depot_tools 目录的门路配置到零碎环境变量 Path 中,且设置到最后面。
下载 webrtc 源码
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync
默认下载的是最新的源码,如果想要切换到指定分支,能够应用以下命令:
# 查看可用版本分支
git branch -r
# 切换到 m79 分支
git checkout branch-heads/m79
gclient sync
# 或者强制切换到指定 commit(b484ec0082948ae086c2ba4142b4d2bf8bc4dd4b 是 m79 最初一次提交的 commit id)gclient sync -r b484ec0082948ae086c2ba4142b4d2bf8bc4dd4b --force
能够在从这里获取 webrtc 所有 release 版本的信息
编译
# 设置 vs2017 环境变量
set GYP_MSVS_VERSON=2017
set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
# 设置 vs2019 环境变量
set GYP_MSVS_VERSON=2019
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
# 编译 vs2017 release:gn gen out\Release-vs2017 --ide=vs2017 --args="is_debug=false target_os=\"win\"target_cpu=\"x64\"is_component_build=false is_clang=false use_lld=false treat_warnings_as_errors=false use_rtti=true rtc_include_tests=false rtc_build_examples=false"
ninja -C out\Release-vs2017
# 编译 vs2019 release:gn gen out\Release-vs2019 --ide=vs2019 --args="is_debug=false target_os=\"win\"target_cpu=\"x64\"is_component_build=false is_clang=false use_lld=false treat_warnings_as_errors=false use_rtti=true rtc_include_tests=false rtc_build_examples=false"
ninja -C out\Release-vs2019
ps:
- 应用 python2 编译!
- 环境变量也能够设置到零碎的环境变量中。
编译胜利后,会在 src\out\xxxx\ 下生成 all.sln 解决方案文件。关上就能够调试 webrtc 的我的项目。在 src\out\xxxx\obj 目录下生成动态库——webrtc.lib,在其余工程中援用这个动态库,蕴含相干头文件,就能够在内部应用 webrtc 的性能了。
windows 提取 webrtc 的所有头文件
在 webrtc 的 src 同级目录执行以下脚本
echo off
:: 定义源目录
set sourcePath=.\src
:: 定义指标门路
set resulePath=.\include
xcopy %sourcePath%\*.h %resulePath%\ /s /e /c /y /r
pause
其余
- VS 工程中编译报错【error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”】。解决方案:该谬误只会在 debug 版呈现,在 debug 的编译中减少编译参数 enable_iterator_debugging=true。
-
webrtc 更多编译参数阐明:
- is_component_build——是否应用动静运行期库,设置 false 示意应用动态运行期库,Release 版本将对应 MT,Debug 版将对应 MTd。
- proprietary_codecs——是否应用版权编码,也就是 H264。
- rtc_use_h264——是否应用 H264。留神 Windows 平台编码应用 OpenH264,解码应用 ffmpeg。
- ffmpeg_branding——ffmpeg 的分支名,采纳 Chrome 的分支。
- rtc_build_ssl——是否编译 BoringSSL。
- rtc_ssl_root——OpenSSL 的头文件门路,会被写到生成的 ninja 文件中。
- use_custom_libcxx——是否应用内置的 libcxx 作为默认的 c ++ 规范库。
- rtc_libvpx_build_vp9——是否反对 vp9 的编解码。
- symbol_level——符号等级。设置为 0 能够减小库的大小。
- 编译 webrtc 减少 H264 反对须要增加编译选项【proprietary_codecs=true rtc_use_h264=true ffmpeg_branding=\”Chrome\” is_clang=true use_lld=false treat_warnings_as_errors=false】(ffmpeg 应用 vc++ 编译编译会有问题,因而必须强制应用 clang)。
- 编译 webrtc 应用 openssl 须要增加编译选项【rtc_build_ssl=false rtc_ssl_root=\”C:\Program Files\OpenSSL-Win64\include\”】。