1. 程式人生 > >CEF編譯整理、支援MP3和MP4的整理以及.NET的呼叫

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工程下的版本。