Windows 平台编译 WebRTC
Windows 平臺編譯 WebRTC 的過程,包括安裝依賴的開發工具等,主要要參考 chromium 瀏覽器的 Windows 平臺編譯文檔,Checking out and Building Chromium for Windows。這里編譯 WebRTC 的 M96 版。
系統要求
- 具有至少 8GB 內存的 64 位 Intel 機器。強烈建議內存大于 16GB。
- 至少 100GB 的空余磁盤空間,且用 NTFS 格式化的分區。不能用 FAT32,因為某些 Git 打包文件可能大于 4GB。
- 一個合適版本的 Visual Studio,如下面的描述。
- Windows 10 或更新的 Windows 系統。
設置 Windows
Visual Studio
Chromium/WebRTC 需要 Visual Studio 2017 (>=15.7.2) 來編譯,但 Visual Studio 2019 (>=16.0.0) 更好。 Visual Studio 也可以被用于調試 Chromium,但版本 2019 更好是由于它處理 Chromium 巨大的調試信息做的更好。盡管使用了 clang-cl 編譯器,但 Visual Studio 的頭文件、庫,及一些工具會被用到。如果 Visual Studio 社區版Visual Studio Community Edition 的許可證合適,用它就可以了。
在 Visual Studio 官網 可以找到下載頁面,在最新版的下載信息左下角有個 “發行說明”:
點開 “發行說明”,可以看到所有版本的發行說明:
點開 Visual Studio 2019 的 “當前發行說明” 頁可以看到 Visual Studio 2019 的下載地址:
必須安裝 “Desktop development with C++” 組件,及 “MFC/ATL support” 子組件。這可以通過在命令行上給 Visual Studio 安裝器傳遞參數來實現(參考下面 ARM64 指導):
$ PATH_TO_INSTALLER.EXE ^ --add Microsoft.VisualStudio.Workload.NativeDesktop ^ --add Microsoft.VisualStudio.Component.VC.ATLMFC ^ --includeRecommended如果想要給 ARM64 Win32 編譯,則需要一些額外的參數。完整的命令行參數如下:
$ PATH_TO_INSTALLER.EXE ^ --add Microsoft.VisualStudio.Workload.NativeDesktop ^ --add Microsoft.VisualStudio.Component.VC.ATLMFC ^ --add Microsoft.VisualStudio.Component.VC.Tools.ARM64 ^ --add Microsoft.VisualStudio.Component.VC.MFC.ARM64 ^ --includeRecommended還必須安裝版本 10.0.19041 或更高版本的 Windows 10 SDK。這可以通過單獨安裝,或選中 Visual Studio Installer 中適當的選項來實現。如我們上面下載的 Visual Studio 2019 社區版的安裝器為 vs_community__de2da9e0d3114609b6724eaa8f0e96c4.exe,打開 Windows PowerShell,切換到安裝器的下載目錄,并輸入如下命令:
PS D:\Users\asdfgh\Downloads> ./vs_community__de2da9e0d3114609b6724eaa8f0e96c4.exe --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Component.VC.ATLMFC --add Microsoft.VisualStudio.Component.VC.Tools.ARM64 --add Microsoft.VisualStudio.Component.VC.MFC.ARM64 --includeRecommended打開 Visual Studio Installer,選中所有需要安裝的依賴:
我這里安裝了 “Desktop development with C++” 組件下的所有子組件,包括各種版本的 Windows 10 SDK:
將 Visual Studio 安裝在 C: 盤是一個比較方便的選擇,但一般來說,C: 盤空間比較有限,我這里將 Visual Studio 安裝在了 D: 盤。這種安裝位置的非默認安裝位置的改變,后面需要專門做一些額外的配置。
SDK Debugging Tools 也必須安裝。如果 Windows 10 SDK 是通過 Visual Studio installer 安裝的,則可以通過如下步驟安裝:控制面板 → 程序 → 程序和功能 → 選擇 “Windows Software Development Kit” (對應版本) → 鼠標右鍵單擊,選擇 “更改” → 更改 → 選中 “Debugging Tools For Windows” → Change。或者也可以下載單獨的 SDK 安裝器并使用它安裝 Debugging Tools。
安裝 depot_tools
下載 depot_tools 包 并將它解壓到某個位置。
警告:不要 使用 drag-n-drop 或從 Explorer copy-n-paste,這可能不會提取隱藏的 “.git” 目錄,這對 depot_tools 自身的自動更新是必須的。可以使用 “Extract all…”。
將 depot_tools 的路徑添加到 PATH 環境變量的前面(必須在安裝的 Python 的路徑的前面)。假設將 depot_tools 包解壓在了 C:\src\depot_tools,則打開:
右鍵單擊 “此電腦” → 屬性 → 高級系統設置 → 環境變量
如果有管理員權限,則修改 PATH 環境變量,并將 C:\src\depot_tools 放在前面(至少也要把它放在安裝了 Python 或 Git 的目錄的前面)。
如果沒有管理員權限,可以添加一個用戶級 PATH 環境變量,并把 C:\src\depot_tools 放在前面,如果你的系統 PATH 環境變量有 Python 的路徑,就有點背了。
然后,還需要以相同方式添加一個 DEPOT_TOOLS_WIN_TOOLCHAIN 系統環境變量,并把它設置為 0。這告訴 depot_tools 使用本地安裝的 Visual Studio 版本(默認情況下,depot_tools 將嘗試使用一個 Google 內部的版本)。
可能還需要添加環境變量 vs2017_install 或 vs2019_install 或 vs2022_install 指向安裝的 Visual Studio 2017 或 19 或 22,如對于 Visual Studio 2019 設置 set vs2019_install=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional,對于 Visual Studio 2022 設置 set vs2022_install=C:\Program Files\Microsoft Visual Studio\2022\Professional。
然后從 cmd.exe 命令行,運行:
$ gclient在第一次運行時,gclient 將會安裝所有 Windows 特有的與代碼一起工作的東西,包括 msysgit 和 python。
- 如果從一個 非 cmd shell (如,cygwin,PowerShell)運行 gclient,它可能看上去正常運行了,但 msysgit,python 和其它工具可能不會被正確安裝。
- 如果你在第一次運行 gclient 時看到了關于文件系統的奇怪的錯誤,可能想要 禁用 Windows Indexing。
獲取代碼
創建一個工作目錄,在命令行中切換到該目錄,并運行 fetch webrtc:
$ mkdir webrtc-checkout $ cd webrtc-checkout $ fetch --nohooks webrtc $ gclient sync在同步代碼期間,需要接受 Google Play Services SDK 的許可協議。這個過程時間有點長。
構建
Ninja 是所有平臺的默認構建系統。
生成 Ninja 工程文件
Ninja工程文件通過 GN生成,由于我們需要使用 Visual Studio 進行代碼編輯調試等,所以使用 GN 生成 Ninja 工程時需要配置 --ide=vs 生成 Visual Studio 的工程文件。通過如下命令生成工程文件(Debug 編譯,工程文件位于out\Default目錄下):
PS D:\> cd .\webrtc\src PS D:\webrtc\src> gn gen --ide=vs out/Default上面的 vs2017_install 或 vs2019_install 或 vs2022_install 這些環境變量不設置的話,這里在執行 gn gen 時會報錯:
PS D:\webrtc\src> gn gen .\out\Default\ Traceback (most recent call last):File "D:/webrtc/src/build/vs_toolchain.py", line 573, in <module>sys.exit(main())File "D:/webrtc/src/build/vs_toolchain.py", line 569, in mainreturn commands[sys.argv[1]](*sys.argv[2:])File "D:/webrtc/src/build/vs_toolchain.py", line 546, in GetToolchainDirruntime_dll_dirs = SetEnvironmentAndGetRuntimeDllDirs()File "D:/webrtc/src/build/vs_toolchain.py", line 106, in SetEnvironmentAndGetRuntimeDllDirsos.environ['GYP_MSVS_OVERRIDE_PATH'] = DetectVisualStudioPath()File "D:/webrtc/src/build/vs_toolchain.py", line 197, in DetectVisualStudioPathversion_as_year = GetVisualStudioVersion()File "D:/webrtc/src/build/vs_toolchain.py", line 186, in GetVisualStudioVersionraise Exception('No supported Visual Studio can be found.' Exception: No supported Visual Studio can be found. Supported versions are: 16.0 (2019), 15.0 (2017). ERROR at //build/config/win/visual_studio_version.gni:27:7: Script returned non-zero exit code.exec_script("../../vs_toolchain.py", [ "get_toolchain_dir" ], "scope")^---------- Current dir: D:/webrtc/src/out/Default/ Command: D:/tools/depot_tools/bootstrap-2@3_8_10_chromium_23_bin/python3/bin/python3.exe D:/webrtc/src/build/vs_toolchain.py get_toolchain_dir Returned 1. See //build/toolchain/win/BUILD.gn:9:1: whence it was imported. import("//build/config/win/visual_studio_version.gni") ^---------------------------------------------------- See //BUILD.gn:30:3: which caused the file to be included.group("default") {^-----------------GN 構建系統的 Python 腳本報錯說,找不到支持 Visual Studio,報錯的這段 Python 腳本代碼位于 D:/webrtc/src/build/vs_toolchain.py,如:
def GetVisualStudioVersion():"""Return best available version of Visual Studio."""supported_versions = list(MSVS_VERSIONS.keys())# VS installed in depot_tools for Googlersif bool(int(os.environ.get('DEPOT_TOOLS_WIN_TOOLCHAIN', '1'))):return supported_versions[0]# VS installed in system for external developerssupported_versions_str = ', '.join('{} ({})'.format(v,k)for k,v in MSVS_VERSIONS.items())available_versions = []for version in supported_versions:# Checking vs%s_install environment variables.# For example, vs2019_install could have the value# "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community".# Only vs2017_install and vs2019_install are supported.path = os.environ.get('vs%s_install' % version)if path and os.path.exists(path):available_versions.append(version)break# Detecting VS under possible paths.path = os.path.expandvars('%ProgramFiles(x86)%' +'/Microsoft Visual Studio/%s' % version)if path and any(os.path.exists(os.path.join(path, edition))for edition in ('Enterprise', 'Professional', 'Community', 'Preview','BuildTools')):available_versions.append(version)breakif not available_versions:raise Exception('No supported Visual Studio can be found.'' Supported versions are: %s.' % supported_versions_str)return available_versions[0]構建系統的 Python 腳本在不設置 vs2017_install 或 vs2019_install 或 vs2022_install 這些環境變量時,會在 C: 盤找安裝的 Visual Studio,由于我們的 Visual Studio 沒有安裝在默認位置,導致這里報錯。這段代碼也向我們指示了解決這個問題的方法,即設置 vs2017_install 或 vs2019_install 或 vs2022_install 這些環境變量中的一個。
在設置了環境變量之后,重啟命令行之后設置才會生效。
設置了 vs2019_install 環境變量之后,遇到了另外一個錯誤:
PS D:\webrtc\src> gn gen .\out\Default\ Traceback (most recent call last):File "D:/webrtc/src/build/vs_toolchain.py", line 573, in <module>sys.exit(main())File "D:/webrtc/src/build/vs_toolchain.py", line 569, in mainreturn commands[sys.argv[1]](*sys.argv[2:])File "D:/webrtc/src/build/vs_toolchain.py", line 547, in GetToolchainDirwin_sdk_dir = SetEnvironmentAndGetSDKDir()File "D:/webrtc/src/build/vs_toolchain.py", line 540, in SetEnvironmentAndGetSDKDirreturn NormalizePath(os.environ['WINDOWSSDKDIR'])File "D:\tools\depot_tools\bootstrap-2@3_8_10_chromium_23_bin\python3\bin\lib\os.py", line 675, in __getitem__raise KeyError(key) from None KeyError: 'WINDOWSSDKDIR' ERROR at //build/config/win/visual_studio_version.gni:27:7: Script returned non-zero exit code.exec_script("../../vs_toolchain.py", [ "get_toolchain_dir" ], "scope")^---------- Current dir: D:/webrtc/src/out/Default/ Command: D:/tools/depot_tools/bootstrap-2@3_8_10_chromium_23_bin/python3/bin/python3.exe D:/webrtc/src/build/vs_toolchain.py get_toolchain_dir Returned 1. See //build/toolchain/win/BUILD.gn:9:1: whence it was imported. import("//build/config/win/visual_studio_version.gni") ^---------------------------------------------------- See //BUILD.gn:30:3: which caused the file to be included.group("default") {^-----------------這段報錯是說,找不到 Windows 10 SDK,這個報錯也是由于我們在非標準位置安裝 Visual Studio 和 Windows 10 SDK 引起的,拋出這段錯誤的 Python 腳本代碼同樣位于 D:/webrtc/src/build/vs_toolchain.py:
def SetEnvironmentAndGetSDKDir():"""Gets location information about the current sdk (must have beenpreviously updated by 'update'). This is used for the GN build."""SetEnvironmentAndGetRuntimeDllDirs()# If WINDOWSSDKDIR is not set, search the default SDK path and set it.if not 'WINDOWSSDKDIR' in os.environ:default_sdk_path = os.path.expandvars('%ProgramFiles(x86)%''\\Windows Kits\\10')if os.path.isdir(default_sdk_path):os.environ['WINDOWSSDKDIR'] = default_sdk_pathreturn NormalizePath(os.environ['WINDOWSSDKDIR'])這段代碼在環境變量和默認的 C: 盤尋找 Windows 10 SDK 的安裝位置,找不到時就會報錯。這段代碼告訴我們,應該設置 WINDOWSSDKDIR 環境變量來解決這個問題。
如果需要 Release 編譯,通過如下命令生成工程文件:
PS D:\webrtc\src> gn gen --ide=vs out/Default --args="is_debug=false"如果不想使用默認編譯參數,可以使用 gn args out/Default --list 查看當前編譯參數,通過類似如下方式設置:
PS D:\webrtc\src> gn gen --ide=vs out/Default --args="use_rtti=true is_clang=false rtc_build_tools=false rtc_include_tests=false rtc_build_examples=false"gn gen 在 args.gn 文件不存在時,會生成這個文件,并將配置參數寫入這個文件,隨后生成 ninja 所需的文件。要對編譯做配置,也可以不在命令行參數中加這些編譯參數,而是直接改 D:\webrtc\src\out\Default\args.gn 文件,如將文件的內容改為下面這樣:
is_debug = true use_rtti=true is_clang=false rtc_build_tools=false rtc_include_tests=false rtc_build_examples=false編譯
生成工程文件后,就可以在 src 目錄下執行編譯命令:
PS D:\webrtc\src> ninja -C .\out\Default\編譯生成:
用 Visual Studio 2019 打開:
可以通過 Visual Studio 調試編譯出來的各種可執行文件。
代碼更新
后續如果需要更新代碼,則可按照如下步驟執行:
PS D:\webrtc\src> git checkout master PS D:\webrtc\src> git pull origin master PS D:\webrtc\src> gclient sync然后參考前面步驟重新生成工程文件,編譯即可。
引用 WebRTC 庫
WebRTC 編譯后會在 src\out\Default\obj 目錄下生成整個 WebRTC 工程的靜態庫:webrtc.lib,鏈接下這個就可以了,需要的頭文件可以在 src\api 目錄下找。
如果 Visual Studio 應用沒配置 Clang 編譯器,鏈接這個 webrtc.lib,生成工程文件時需要配置如下參數:gn gen --ide=vs out/Default --args="is_clang=false use_lld=false",禁用 clang 與 lld。
參考文檔:
WebRTC development
Checking out and Building Chromium for Windows
Windows平臺WebRTC編譯(持續更新)
Getting Started with WinRTC
Done
總結
以上是生活随笔為你收集整理的Windows 平台编译 WebRTC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WebRTC 的传输协议
- 下一篇: inotify 机制