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"】。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容