Windows下編譯WebRTC

前言

隨著新冠疫情的影響,這兩年音視頻的需求呈爆發(fā)式增長。在音視頻領(lǐng)域中,WebRTC可以說是一個(gè)繞不開寶庫,包括了音視頻采集、編解碼、傳輸、渲染的全過程。本文主要記錄下在Windows平臺上編譯WebRTC的全過程。

安裝VS

在Windows下開發(fā)和調(diào)試程序我們一般都是使用宇宙最強(qiáng)IDE——Visual Studio,webRTC也支持我們生成VS的工程。安裝VS過程不贅述(推薦安裝VS2017或VS2019),需要注意的是VS安裝的時(shí)候須勾選下面三項(xiàng):

  • 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安裝選項(xiàng)中不帶有Windows 10 SDK(10.0.18362),可以從從Win10 SDK下載,或者直接安裝VS2019。

安裝完VS后,還需要安裝SDK調(diào)試工具。方法是:

  • 打開控制面板->程序與功能,找到Windows Software Development Kit,鼠標(biāo)右鍵->更改。
  • 在打開界面中選擇Change,點(diǎn)擊Next。
  • 勾選Debugging Tools For Windows,點(diǎn)擊Change。

設(shè)置代理

因?yàn)楸娝苤脑?,要下載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目錄的路徑配置到系統(tǒng)環(huán)境變量Path中,且設(shè)置到最前面。

下載webrtc源碼

mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync

默認(rèn)下載的是最新的源碼,如果想要切換到指定分支,可以使用以下命令:

# 查看可用版本分支
git branch -r
# 切換到m79分支
git checkout branch-heads/m79
gclient sync
# 或者強(qiáng)制切換到指定commit(b484ec0082948ae086c2ba4142b4d2bf8bc4dd4b是m79最后一次提交的commit id)
gclient sync -r b484ec0082948ae086c2ba4142b4d2bf8bc4dd4b --force

可以在從這里獲取webrtc所有release版本的信息

編譯

# 設(shè)置vs2017環(huán)境變量
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

# 設(shè)置vs2019環(huán)境變量
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使用我們本機(jī)的VS進(jìn)行編譯
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編譯!
  • 環(huán)境變量也可以設(shè)置到系統(tǒng)的環(huán)境變量中。

編譯成功后,會在src\out\xxxx\下生成all.sln解決方案文件。打開就可以調(diào)試webrtc的項(xiàng)目。在src\out\xxxx\obj目錄下生成靜態(tài)庫——webrtc.lib,在其他工程中引用這個(gè)靜態(tài)庫,包含相關(guān)頭文件,就可以在外部使用webrtc的功能了。

windows 提取webrtc的所有頭文件

在webrtc的src同級目錄執(zhí)行以下腳本

echo off
 
:: 定義源目錄
set sourcePath=.\src
::定義目標(biāo)路徑
set resulePath=.\include
 
xcopy %sourcePath%\*.h %resulePath%\  /s /e /c /y /r
 
pause

其他

  • VS工程中編譯報(bào)錯(cuò)【error LNK2038: 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項(xiàng): 值“0”不匹配值“2”】。解決方案:該錯(cuò)誤只會在debug版出現(xiàn),在debug的編譯中增加編譯參數(shù)enable_iterator_debugging=true。

  • webrtc更多編譯參數(shù)說明:

    • is_component_build——是否使用動(dòng)態(tài)運(yùn)行期庫,設(shè)置false表示使用靜態(tài)運(yùn)行期庫,Release版本將對應(yīng)MT,Debug版將對應(yīng)MTd。
    • proprietary_codecs——是否使用版權(quán)編碼,也就是H264。
    • rtc_use_h264——是否使用H264。注意Windows平臺編碼使用OpenH264,解碼使用ffmpeg。
    • ffmpeg_branding——ffmpeg的分支名,采用Chrome的分支。
    • rtc_build_ssl——是否編譯BoringSSL。
    • rtc_ssl_root——OpenSSL的頭文件路徑,會被寫到生成的ninja文件中。
    • use_custom_libcxx——是否使用內(nèi)置的libcxx作為默認(rèn)的c++標(biāo)準(zhǔn)庫。
    • rtc_libvpx_build_vp9——是否支持vp9的編解碼。
    • symbol_level——符號等級。設(shè)置為0可以減小庫的大小。
  • 編譯webrtc增加H264支持需要添加編譯選項(xiàng)【proprietary_codecs=true rtc_use_h264=true ffmpeg_branding="Chrome" is_clang=true use_lld=false treat_warnings_as_errors=false】(ffmpeg使用vc++編譯編譯會有問題,因此必須強(qiáng)制使用clang)。

  • 編譯webrtc使用openssl需要添加編譯選項(xiàng)【rtc_build_ssl=false rtc_ssl_root="C:\Program Files\OpenSSL-Win64\include"】。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容