前言
目前客戶端引用了cef sharp
庫來嵌入web頁面
cef sharp
是對cef
(chromium embed framework)的c#封裝
cef
是對chromium內核
的c++封裝
什么是chromium
?
chromium
是google chrome
內核的開源庫
google chrome
上開發的功能都會先放到chromium
上實驗
成功了才會合並到google chrome
發布
所以chromium
可以視為google chrome
的預覽版
由於專利原因
chromium
的發布版不支持mp3, h264(視頻編碼
如果需要這些功能,需要自己重新編譯
為了解決這個禪道bug(chromium離屏渲染下的鼠標滾輪bug,google chrome不是離屏渲染,wpf客戶端上使用的cefsharp是),我打算重新編譯cef,,順便編譯chromium內核以支持mp3和h264.
編譯注意事項
1.官方編譯文檔
2.執行官方文檔上的步驟需要禾斗學上網,(https, git,和DNS)
3.按照官方文檔編譯出來的chromium內核是不支持mp3
,h264
的,需要手動加一些編譯變量
4.chromium
內核分支版本不指定的話拉取到master的代碼
編譯步驟
1.安裝vs2017
$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
安裝完后,到應用程序里找到windows sdk 右鍵修改,先change,下一步,
把debugging tools for windows打鈎,否則后面創建解決方案會失敗
2.創建以下目錄
c:\code\automate
c:\code\chromium_git
c:\code\depot_tools
3.depot_tools
下載 depot_tools.zip,解壓到depot_tools文件夾
4.automate-git.py
下載 automate-git.py 放到 automate文件夾
5.設置系統環境變量
1.Path 新增一個路徑c:\code\depot_tools
2.創建一個系統變量DEPOT_TOOLS_WIN_TOOLCHAIN 值0
6.拉取代碼
在C:\Code\chromium_git
創建update.bat
,內容如下
set GN_DEFINES=use_jumbo_build=true ffmpeg_branding=Chrome proprietary_codecs=true
set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/*
python ..\automate\automate-git.py --download-dir=c:\code\chromium_git --depot-tools-dir=c:\code\depot_tools --no-distrib --no-build --branch=3770
設置好代理后 執行腳本,會自動拉取cef和chromium的源碼
總共20G左右
7.為源碼創建解決方案
拉取代碼后
切換到目錄 C:\Code\chromium_git\chromium\src\cef
創建create.bat
內容如下
set GN_DEFINES=use_jumbo_build=true ffmpeg_branding=Chrome proprietary_codecs=true is_component_build=false
set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/*
call cef_create_projects.bat
發布時記得設置is_component_build = false
編譯時可能會出現找不到LASTCHANGE.committime
這一文件,
在C:\code\chromium_git\chromium\src\build\util
下
執行
python lastchange.py -o LASTCHANGE
即可生成
運行create.bat后,生成成功后
8.執行編譯
編譯之前,我先把cef的代碼加一些洗發水(特效),解決一下鼠標滾輪關閉select元素的bug
切換到C:\Code\chromium_git\chromium\src
編譯chromium內核
執行編譯x64
python -m pip install pywin32 安裝pywin32庫
gn args out\Release_GN_x64 可用來配置編譯參數
gclient runhooks 更新編譯時需要的依賴
ninja -C out\Release_GN_x64 cef
編譯x86如法炮制
編譯時間如果用機械硬盤硬盤要4小時左右
建議使用固態硬盤,我用我自己的筆記本 i7低壓,估計也要不少時間,
等編譯完成了再來更新第9步
9. 測試編譯后的chromium 內核
1.osr渲染模式下滾動鼠標不應該關閉html select element
命令行傳參 開啟離屏渲染(osr)打開cefclient,
C:\Code\chromium_git\chromium\src\out\Release_GN_x64> cefclient --multi-threaded-message-loop --off-screen-rendering-enabled --enable-gpu
鼠標滾動不會關閉select了
功能通過
2.可以播放視頻音頻
打開bilibili播放一個視頻
功能通過
結語
我的電腦cpu是i7 低壓,內存24GB
編譯過程其實(兩三個小時)*2就結束了
主要過程還是在拉代碼
在編譯的過程中內存有幾次用光過
所以內存朋友小的朋友編譯之前應該把虛擬內存設置多一點
編譯完32位和64位,文件夾大小為
所以編譯前至少留100GB左右的存儲空間吧