CEF編譯整理、支援MP3和MP4的整理以及.NET的呼叫
由於chrome目前不支援NPAPI,專案中需要用到NPAPI控制元件,所以嘗試編譯低版本的chrome;
關於3.2357.1287.g861c26e、3.2526.1373.gb660893、3.2623.1397.gaf139d7 的編譯版本,三個都支援MP3\MP4。下載地址:
以下是自己研究一些整理資料:
cef和chrome的關係: chrome程式碼是谷歌瀏覽器的開源庫,CEF則是chrome提供給其他語言呼叫的介面,CEF類似於chrome介面的一個封裝;
Xilium.CefGlue則是對CEF的再次保證,提供給.NET呼叫
cef的原始碼:https://bitbucket.org/chromiumembedded/cef/
chrome的原始碼:https://chromium.googlesource.com/chromium/
cef編譯版本:http://opensource.spotify.com/cefbuilds/index.html
這個編譯版本下載下來,比如:cef_binary_3.3396.1779.g36f9eab_windows32.tar.bz2 可以用CMake生成VS的工程,可以修改cefclient和cefsimple的程式碼,但是改不了chrome的原始碼,當然也改不了支援MP3\MP4;
關於CEF版本對NPAPI的支援,和谷歌官方說的可能不一樣,官方說是43版本最後一個支援的,其實不然,49版本是最後一個支援的,只是49版本閹割了NPAPI的網路模組,導致依賴NPAPI介面的flash和siverlight,都不能用了,說了,嚴格意義上 45版本是最後一個完整支援NPAPI的;當然誰有興趣也可以改下49版本的NPAPI,加上被去掉的網路模組,我嘗試過,由於chrome程式碼改動量太大,每天至少幾百個GIT提交,要找到去掉的程式碼實在太多,不得不放棄了;畢竟不是專業些瀏覽器的;
廢話說了這多,下面是CEF的編譯
關於CEF的編譯,我嘗試編譯了3個版本,分別是:3.2357.1287.g861c26e、3.2526.1373.gb660893、3.2623.1397.gaf139d7
這個版本號,是libcef.dll的屬性可以看到詳細版本號;
編譯之前,請自行購買翻牆的軟體,建議大家別用SS和SSR代理,因為下載原始碼的過程,會有GS://的訪問,這個SS代理不了,建議大家直接購買VPN或者全域性代理的軟體;
第一步:環境準備
(1)64位作業系統,Win 7+;
(2)vs2013 update4;
(3)Windows 8.1 SDK
VS編譯版本大家可以參考我這個的
第二步:目錄建立chrome,chrome下面有3個資料夾:automate、chromium_git、depot_tools
第三步:確點checkout版本
比如CEF版本是3.2526.1373.gb660893
訪問:https://bitbucket.org/chromiumembedded/cef/commits/branch/2526
切換到2526分支,可以看到b660893對應的是2526最新的分支,
checkout的值是b660893c6e800374d2b908a0b56ca47441ea2135;下面我還會講.NET對應的CEF版本是怎麼找的
第四步:下載編譯工具:depot_tools
下載地址:https://chromium.googlesource.com/chromium/tools/depot_tools
由於我們編譯的版本是比較老的版本,最新的depot_tools編譯會有問題,所以最好用GIT切到你要編譯的版本對應的日期上,我這邊切換到是 這個分支:SHA-1: 1a85b3c9a2c92d4c23c00450a29ecf44f28be6b1,時間點是2016/5/26日,這個自己把握吧,我也是踩坑過來的;
下載下工具後,我們需要手動更新工具,這個更新並不是GIT更新,而是depot_tools的工具下載更新;我們首先要關掉GIT 的更新;
開啟 update_depot_tools檔案,set DEPOT_TOOLS_UPDATE=0
CMD執行 update_depot_tools.bat ;
depot_tools的目錄新增到環境變數path中,最好放在前面點,可能和已經安裝好的python git svn衝突
記住:python 、git 、svn、depot_tools都 需要再環境變數裡,沒有的自己安裝檢查;python 是2.7的版本即可
第五步:找到CEF對應分支後,去TOOLS資料夾下載automate-git.py放到 本地automate資料夾;
https://bitbucket.org/chromiumembedded/cef/src/b660893c6e800374d2b908a0b56ca47441ea2135/tools/automate/automate-git.py?at=2526
第六步:下載程式碼
首先環境變數調整好:
設定:DEPOT_TOOLS_UPDATE=0;
DEPOT_TOOLS_WIN_TOOLCHAIN=0
GYP_GENERATORS=ninja,msvs-ninja
GYP_MSVS_VERSION=2013
在chromium_git目錄下,新建個UPDATE.BAT檔案,檔案寫如下指令:
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_DEFINES=buildtype=Official
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_MSVS_VERSION=2013
python ..\automate\automate-git_2526.py --download-dir=D:\chrome\chromium_git --depot-tools-dir=D:\chrome\depot_tools --branch=2526 --no-build --no-distrib --force-clean --force-clean-deps --no-depot-tools-update
經過5-6個小時的等待。20G的程式碼下載完了,
引數:
// 以下為引數說明
--download-dir 原始碼下載目錄
--depot-tools-dir 工具包目錄
--branch 原始碼分支(預設trunk主分支
--checkout 指定patch版本(預設最近提交 如何確定checkout下文介紹
--no-build 下載完不自動開始編譯(我們需要修改編譯配置
--no-update 確定原始碼下載完畢僅重新編譯時使用
--force-build 強制編譯(發現在有成功編譯的時候再編譯不會執行,可以加上這個
--no-debug-build 只編譯release版本
--no-release-build 只編譯debug版本
第七步: 修改支援MP4\MP4\,然後是忽略警告,我以2526版本為例,2357版本太多修改,建議大家別玩這個版本,我玩了好幾天:
開啟e:\cef\source\chromium\src\cef\cef.gypi,variables節下新增如下即可支援mp3/mp4。
'proprietary_codecs': 1,
'ffmpeg_branding': 'Chrome',
從Chromium的原始碼third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h可以得知Chrome採用的FFmpeg的配置選項,在原有的配置選項後面新增如下選項:
--enable-decoder='rv10,rv20,rv30,rv40,cook,h263,h263i,mpeg4,msmpeg4v1,msmpeg4v2,msmpeg4v3,amrnb,amrwb,ac3,flv' --enable-demuxer='rm,mpegvideo,avi,avisynth,h263,aac,amr,ac3,flv,mpegts,mpegtsraw' --enable-parser='mpegvideo,rv30,rv40,h263,mpeg4video,ac3'
common.gypi 修改:
[ 'OS=="win"', {
'defines': [
'_CRT_SECURE_NO_DEPRECATE',
'_CRT_NONSTDC_NO_WARNINGS',
'_CRT_NONSTDC_NO_DEPRECATE',
'_SCL_SECURE_NO_DEPRECATE',
],
'msvs_disabled_warnings': [
4800,4091,4127,4351,4355,4503,4589,4611,4100,4121,4244, 4505,4510,4512,4610, 4838, 4995, 4996,
4334,4819,4396, 4125,4130,4131,4189, 4201, 4238,4245,4310,4428, 4481,4530, 4701, 4702,4706,
4067,4251,4702,4456, 4457, 4458, 4459,4312,
],
google_apis.gyp 修改
'msvs_disabled_warnings': [4267,4334, ],
skia_common.gypi 修改
'msvs_disabled_warnings': [4244, 4267, 4334, 4341, 4345, 4390, 4554, 4748, 4800],
第八步編譯:
編譯時,需要預留40G空間,對是40G,你沒看錯,你編譯完就知道為什麼需要40G了
設定系統區域為英語(美國)。(控制面板-區域-管理-更改系統區域設定-英語(美國),電腦重啟後生效
在chromium_git目錄下,新建個COMEON.BAT檔案。其實名字隨便取啦;
內如如下:
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_DEFINES=buildtype=Official
set GYP_MSVS_VERSION=2013
set CEF_ARCHIVE_FORMAT=tar.gz
python ..\automate\automate-git_2526.py --download-dir=D:\chrome\chromium_git --depot-tools-dir=D:\chrome\depot_tools --branch=2526 --no-debug-build --verbose-build --force-build --force-distrib --no-update --build-log-file
然後開始漫長的編譯過程,force-distrib這個引數我說下,強制釋出,不加的話不會生成釋出檔案,也就是http://opensource.spotify.com/cefbuilds/index.html這個網站下的東東,可以用CMAKE生成工程檔案的;
編譯完成;
下面關於.NET的呼叫
.NET呼叫CEF目前是有3種方式的:
我們現在說的都是CEF3,CEF1是舊的介面,已經沒人用了
CefSharp:https://github.com/cefsharp/CefSharp 這個封裝的很好,適合新手使用,據說效率不如xilium
xilium.cefglue: https://bitbucket.org/xilium/xilium.cefglue 封裝的一般,好在擴充套件性不錯,可自行修改封裝
chromiumfx:https://bitbucket.org/chromiumfx/chromiumfx 封裝的一般,而且並不太好用;
目前大部分人用的應該是xilium.cefglue,首先這個玩意也是找對應CEF版本的;
訪問 https://bitbucket.org/xilium/xilium.cefglue,切換到對應分支,比如:2526分支,找到cefglue工程下的
version.g.s裡找到CEF_VERSION為:3.2526.1366.g8617e7c; 還有CEF_API_HASH_PLATFORM_WIN這個對應是cefclient工程下的版本。