在Windows下編譯Cef3.2623並加入mp3、mp4支持

轉自http://blog.csdn.net/zhuhongshu/article/details/54193842

準備

  1. 快速穩定的VPN(非常重要,免費的VPN不靠譜,最好花錢買個VPN或者公司有穩定的翻牆)
  2. Win7或者更新的系統,必須64位
  3. VS2013 Update4(編譯不同版本要求不一樣,具體看Cef官網幫助,我用的是VS2013 Update5)
  4. Win10 SDK
  5. 60G剩餘空間(用SSD最好,編譯速度很依賴CPU和硬盤)
  6. 下載Python並添加到Path環境變量(我的是Python2.7,這個是爲了運行腳本)
  7. 添加系統環境變量

    • CEF_ARCHIVE_FORMAT=tar.bz2
    • DEPOT_TOOLS_WIN_TOOLCHAIN=0
    • CEF_USE_GN=0
    • GYP_DEFINES=buildtype=Official
    • GYP_MSVS_VERSION=2013
    • GYP_GENERATORS=ninja,msvs-ninja

VS版本起碼要使用官網指定的最低版本;Win10 SDK必須要有,默認安裝位置在(C:\Program Files (x86)\Windows Kits\10),沒有的話去微軟官網下載。

檢出代碼

  1. 下載automate-git.py 腳本並保存到一個英文目錄,最好直接在磁盤根目錄建立個簡單的目錄就好,我的是E:\cef\
  2. 打開cmd切換到你的目錄,然後輸入命令來下載
python automate-git.py --download-dir=e:\cef\source --branch=2623 --no-build --no-distrib --force-clean

其中--branch=2623是指定要下載的Cef版本; 
--no-build --no-distrib是隻下載代碼而不編譯; 
--force-clean這個參數用於清理Chromium和Cef的一些檢出信息,如果沒有一次性下載成功而再次執行下載命令時,需要帶上這個參數來清理一些信息,否則檢出會失敗(第一次下載時直接帶上這個參數也可以)。

下載和編譯只需要這個一個腳本就可以,腳本會自動下載depot_tools 、Chromium、Cef等源碼。如果下載過程中出現錯誤,就再次執行這個命令直到下載完成。網絡穩定的話一次性大概5個小時就能成功,不穩定的話經常會出現錯誤。

解決各種編譯錯誤

編譯2623版本的過程中會遇到一些錯誤,導致編譯失敗。Cef編譯一次起碼就要5個小時,真是消耗不起。

一、添加MP3、MP4支持 
打開e:\cef\source\chromium\src\cef\cef.gypi文件,在variables節下添加如下配置信息

'proprietary_codecs': 1,
'ffmpeg_branding': 'Chrome',

分別打開e:\cef\source\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h 
和e:\cef\source\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\x64\config.h,在原有配置宏FFMPEG_CONFIGURATION裏增加以下: 
–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’

二、ACTION Copying D3D Compiler DLL錯誤 
我最開始就是碰到了這個錯誤,提示找不到d3dcompiler_47.dll這個文件。後來發現是我的Win10 SDK安裝的不完整,導致(C:\Program Files (x86)\Windows Kits\10\Redist\D3D)目錄裏沒有這個DLL文件。解決方法是去微軟官網下載安裝了最新的Win10 SDK。

三、e:\cef\source\chromium\src\ui\gl\gl_bindings_skia_in_process.cc(860) 
在編譯配置文件裏去掉這兩個文件就可以:gl_bindings_skia_in_process.cc和 gl_bindings_skia_in_process.hh

打開src/ui/gl/BUILD.gn和gl.gyp文件,查找這兩個代碼文件並刪掉。詳見https://codereview.chromium.org/1673323002

四、egl語法/類型錯誤 
修改 e:\cef\source\chromium\src\third_party\swiftshader\include\egl\eglext.h,第61、62行:

typedef void *EGLSyncKHR, *EGLSync;
typedef intptr_t EGLAttribKHR, EGLAttrib;

五、無法識別的符號_ff_w64_guid_data 
修改chromium/third_party/ffmpeg / ffmpeg_generated.gypi, 
在行’libavformat/vorbiscomment.c’,後加入’libavformat/w64.c’,

六、e:\cef\source\chromium\src\cef\libcef\browser\browser_host_impl.cc(666): error C2039 
查找gyp文件,把print_view_manager_base.h和print_view_manager_base.cc,放到print_view_manager.h和print_view_manager.cc前面

七、屏蔽編譯時的警告,編譯的時候出現警告會暫停編譯 
在src\build\common.gypi文件中:搜索'msvs_disabled_warnings',設置其中的值爲(我搜索到了好幾處,每一處都這樣設置了):

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,4800,4251,4702,4456, 4457, 4458, 4459,4312,

編譯代碼

  1. 編譯前一定要設置系統區域爲英語(美國)並重啓,否則因爲編碼的源碼會導致編譯不通(控制面板-區域-管理-更改系統區域設置-英語(美國)
  2. 打開cmd切換到你的目錄,然後輸入命令來編譯
python automate-git.py --download-dir=e:\cef3\source --branch=2623 --no-update --no-debug-build --build-log-file --verbose-build --force-distrib --force-build

其中--no-update是讓腳本不再更新代碼,因爲我們已經下載完畢了; 
--no-debug-build是隻編譯release版本,這樣編譯速度會快很多,--no-release-build可以只編譯debug版本; 
--force-distrib --force-build用於強制編譯cef代碼; 
--build-log-file --verbose-build用於輸出編譯日誌到e:\cef\source目錄,名字爲build-2623-release.log,這個很重要,如果編譯發生錯誤,可以打開這個日誌文件並通過搜索關鍵字FAILED來查找發生錯誤的文件; 
如果需要64位版本,則添加--x64-build參數

參考資料

Cef官網幫助 
http://www.cnblogs.com/hezhixiong/p/5935143.html 
http://www.cnblogs.com/longxiang92/p/6141653.html?utm_source=itdadao&utm_medium=referral 
http://blog.csdn.net/yufei_lgq/article/details/53838270 
http://blog.csdn.net/qsy2000/article/details/52845895?locationNum=12&fps=1

總結

最終Dll輸出路徑爲:

e:\cef\source\chromium\src\out\Release
e:\cef\source\chromium\src\cef\binary_distrib

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章