关于webrtc:Windows下编译WebRTC

前言

随着新冠疫情的影响,这两年音视频的需要呈爆发式增长。在音视频畛域中,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\”】。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理