在Windows下編譯Cef3.2623並加入mp3、mp4支持(附帶源碼包和最終DLL)

轉載請說明原出處,謝謝~~:http://blog.csdn.net/zhuhongshu/article/details/54193842

之前把離屏渲染模式的Cef3作爲控件嵌入到項目窗體裏。現在因爲工作需要,爲了得到支持mp3、mp4的cef32和64位版本,我得編譯cef3的2623版本(最後一個支持xp的cef)。沒編譯之前就知道這是個大坑,果不其然,花了一星期才編譯出來。看了不少網上的教程,感覺沒有特別完整的,特地把自己的編譯過程記錄下來,以備後用。

需要專門吐槽一下中國防火牆,一星期中有5天我都花在了翻牆下載代碼中。git還不支持斷點續傳,網絡不穩定的話檢出代碼能氣死人啊!!!

準備

  1. 快速穩定的VPN(非常重要,免費的VPN不靠譜,最好花錢買個VPN或者公司有穩定的翻牆。我公司自帶翻牆,但是有幾個代碼檢出地址有些問題,導致我檢出了5天才下載好代碼。這個條件打不到就別指望成功了)
  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(根據你的VS版本設置)
    • 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個小時就能成功,不穩定的話經常會出現錯誤,我經常碰到錯誤,所以下載了5天才成功!

考慮到國能很多人被中國防火牆堵死,也爲了我以後方便。我專門把下載好的完整源碼都打包上傳到網盤,如果被牆的朋友可以直接下載我打包好的(PS:這個包我已經把源碼中的一些錯誤修改了,並且加入mp3、mp4支持,可以直接編譯,下載地址文章最後給出)

解決各種編譯錯誤

編譯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語法/類型錯誤
修改h:\ws\source\chromium\src\third_party\swiftshader\include\egl\eglext.h,
在62行後加入typedef 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

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

源碼包下載地址:點我下載
最終Dll、Lib、PDB、頭文件下載地址(release、debug、x64):點我下載
如果網盤失效了,就直接聯繫我,我再上傳
如果發現使用我的Dll程序無法運行,可以嘗試把VS升級到VS2013 Update5,因爲我編譯cef用的就是VS2013 Update5
Redrain QQ:491646717 2017.1.8

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