windows平臺編譯CEF支援H264(MP3、MP4)超詳細

2022-06-29 18:00:36

編譯目標(如何確定目標定版本請檢視:BranchesAndBuilding

CEF Branch:4664
CEF Commit:fe551e4
Chromium Version:96.0.4664.110

編譯環境準備

1 安裝或修改VS2019

VS版本和SDK版本可檢視:BranchesAndBuilding

1)在在工作負荷勾選使用C++的桌面開發

 2)在「單個元件」勾選「Windows 10 SDK (10.0.19014.0)」

3)安裝或修改完成後在「控制面板」/「程式」/「解除安裝程式」中找到剛才對應的SDK,「右鍵」/「更改」

4)找到「Debgging Tools for Windows」,然後勾選

2 網路代理工具和代理設定

1)一個穩定的代理, 比如: V2free

2)設定git 代理(v2rayN本地服務地址為http://127.0.0.1:10809)

::設定代理(執行一次即可)
git config --global http.proxy http://127.0.0.1:10809
git config --global https.proxy http://127.0.0.1:10809
::取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

CEF 原始碼編譯流程

1 建立工作目錄

md C:\Code\cef\
md C:\Code\chromium\src\
md C:\Code\depot_tools\

2 新增環境變數

:: 代理
setx HTTP_PROXY "http://127.0.0.1:10809"
setx HTTPS_PROXY "http://127.0.0.1:10809"

:: 禁止depot_tools自動更新
setx DEPOT_TOOLS_UPDATE "0"

:: 使用本地安裝的 Visual Studio 版本
setx DEPOT_TOOLS_WIN_TOOLCHAIN "0"

:: GN 構建工具
setx CEF_USE_GN "1"

:: 使用 VS2019 建立專案
setx GN_ARGUMENTS "--ide=vs2019 --sln=cef --filters=//cef/*"

:: 使用官方構建並新增ffmpeg音視訊解碼
setx GN_DEFINES "is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome"

:: 將depot_tools路徑("C:\Code\depot_tools\)新增到使用者環境變數Path
for /f "tokens=3,*" %i in ('reg query HKCU\Environment /v Path') do setx Path "C:\Code\depot_tools\;%i%j"

執行以上命令即可在系統中建立環境變數 (記得不用的時候把這些環境變數刪除了)

3 下載原始碼

1)下載cef

cd C:\Code

:: clone原始碼並切換至4664分支
git clone https://bitbucket.org/chromiumembedded/cef.git -b 4664

2)下載chromium

cd C:\Code\chromium

:: clone指定tag(96.0.4664.110)的原始碼, (cef 4664分支 對應chromiun tag: 96.0.4664.110)
:: "--depth 1": 只下載當前版本不需要歷史提交記錄, 否則耗時嚴重且浪費儲存空間或者意外中斷
git clone https://chromium.googlesource.com/chromium/src.git -b 96.0.4664.110 --depth 1

3)下載depot_tools

cd C:\Code

:: clone depot_tools工具
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

cd C:\Code\depot_tools

:: 臨時允許更新
set DEPOT_TOOLS_UPDATE=1
:: 執行update_depot_tools.bat下載內部工具
update_depot_tools.bat
:; 禁止更新
set DEPOT_TOOLS_UPDATE=0

:: checkout, (cef 4664分支 對應depot_tools commit id: e023d44820)
checkout e023d44820

注意: cef, chromium, depot_tools對應版本關係在"cef\CHROMIUM_BUILD_COMPATIBILITY.txt"

4 gclient 同步chromium依賴專案

1)建立.gclient檔案

cd C:\Code\chromium

:: 通過命令建立.gclient檔案
gclient config  https://chromium.googlesource.com/chromium/src.git --unmanaged

2)執行gclient sync

cd C:\Code\chromium

gclient sync --nohooks --no-history

此命令執行過程中可能會中途暫停或失敗,耐心等待或重複執行此命令直到成功為止

3)執行gclient runhooks

cd C:\Code\chromium

:: 如果前面已經設定了此環境變數, 可以不用執行
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

gclient runhooks

此命令執行過程中可能會中途暫停或失敗,耐心等待或重複執行此命令直到成功為止

5 構建專案

1)複製 C:\Code\cef 到 C:\Code\chromium\src

xcopy "C:\Code\cef" "C:\Code\chromium\src\cef\" /e

2)構建專案

cd C:\Code\chromium\src\cef

:: 如果前面已經設定了這些環境變數則可以跳過這3條命令
set CEF_USE_GN=1
set GN_ARGUMENTS=--ide=vs2019 --sln=cef --filters=//cef/*
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome

:: 構建專案
call cef_create_projects.bat

6 編譯

cd C:\Code\chromium\src

ninja -C out/Release_GN_x86 cef

7 打包

cd C:\Code\chromium\src\cef\tools

make_distrib.bat --ninja-build --client

在 C:\Code\chromium\src\cef\binary_distrib 目錄下就可以看到打包過的檔案了

8 其他

1)如果在構建或編譯過程中遇到python gbk編碼錯誤, 找到報錯的程式碼新增 utf-8 編碼即可, 比如:

      if (environment_block_name != ''):
        env_block = _FormatAsEnvironmentBlock(env)
        with open(environment_block_name, 'w', encoding='utf-8') as f:
          f.write(env_block)