如何在Windows上從源碼編譯Chromium (CEF3) 加入mp3支持

轉載自: http://www.cnblogs.com/himax/p/how_to_build_cef3_on_windows.html

一、什麼是CEF

CEF即Chromium Embeded Framework,由谷歌的開源瀏覽器項目Chromium擴展而來,可方便地嵌入其它程序中以得到瀏覽器功能。

CEF包括CEF1和CEF3兩個版本,CEF1已停止更新。由於CEF只支持C、C++,所以出現了很多第三方項目來提供其它語言的支持。

.NET 的包裝類庫有chromiumfx、cefglue、cefsharp,其它語言參看https://bitbucket.org/chromiumembedded/cef#markdown-header-external-projects 。

CEF版本號說明:3.2357.1281.gd660177 -> CEF版本號.Branch.Patch.Hash

二、爲何要編譯CEF

在使用chromiumfx+cef過程中發現不支持主流的mp3、mp4格式,經過搜索發現因爲這些格式不是開放格式,出於版權的考慮在chromium編譯配置中去掉了對這些格式的支持。要添加支持必須修改編譯的配置參數。網上流傳的通過複製chrome目錄下ffmpeg.dll替換的方式經過實踐並沒有成功,於是決定動手編譯。

三、編譯先決條件

1.快速穩定的VPN (不但要fq而且要穩定。下載webkit時候單個文件4G+,一旦失敗則需要重新下載

2.64位操作系統,win7+

3.硬盤空間40G+,內存4G+

4.大量的時間 (下載五六個小時,編譯兩三個小時

5.vs2013 update4、win8.1 SDK (Express不行,update5+未測試

四、編譯過程

1.升級vs13至update4,安裝Microsoft Foundation Classes for C++(MFC庫,可運行vs安裝包安裝),安裝win8.1 SDK。

2.設置系統區域爲英語(美國)。(控制面板-區域-管理-更改系統區域設置-英語(美國)

3.添加環境變量

DEPOT_TOOLS_WIN_TOOLCHAIN=0

GYP_GENERATORS=ninja,msvs-ninja

GYP_MSVS_VERSION=2013

4.創建工作目錄,儘量簡單,不帶空格特殊字符。例:e:\ws

5.下載解壓工具包解壓至工作目錄,並添加到系統環境變量Path末尾。例:e:\ws\depot_tools

下載:depot_tools (原頁面

6.下載編譯腳本至工作目錄

下載:automate-git.py 

7.工作目錄下建立源碼目錄。例:e:\ws\source

8.以管理員身份運行cmd,切換至工作目錄,運行gclient

1 e:
2 cd e:\ws
3 gclient

等待安裝python和git,大約五六分鐘。

9.繼續執行

python automate-git.py

根據提示選擇合適配置參數

--download-dir 源碼下載目錄

--depot-tools-dir 工具包目錄

--branch 源碼分支(默認trunk主分支

--checkout 指定patch版本(默認最近提交 如何確定checkout下文介紹

--no-build 下載完不自動開始編譯(我們需要修改編譯配置

--no-update 確定源碼下載完畢僅重新編譯時使用

--force-build 強制編譯(發現在有成功編譯的時候再編譯不會執行,可以加上這個

--no-debug-build 只編譯release版本

--no-release-build 只編譯debug版本

python automate-git.py --download-dir=e:\ws\source --depot-tools-dir=e:\ws\depot_tools --branch=2357 --checkout=d66017718b0f0d44da42b706c3c2aa5c0c103852 --no-build 

10.等待下載完成。睡上一覺,或盯着屏幕六小時。

五、如何確定--checkout值

如果確定需要分支下的最新版本,請略過此節。

1.從http://cefbuilds.com/檢查目標版本的hash值。例:3.2357.1281.gd660177中的gd660177

2.從https://bitbucket.org/chromiumembedded/cef/branches/進入目標分支。例:2357

3.在Commits中檢索目標hash,注意版本號中hash爲8位,commits中爲7位,可以忽略第一位搜索。例:gd660177->d660177

4.點擊相應commit,即可在地址欄中得到checkout值。例:d66017718b0f0d44da42b706c3c2aa5c0c103852

六、修改編譯配置

1.打開e:\ws\source\chromium\src\cef\cef.gypi,variables節下添加如下即可支持mp3。

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

同時可參考http://blog.csdn.net/chromium_webkit/article/details/8575629加入更多格式支持

從Chromium的源碼third_party\ffmpeg\chromium\config\Chrome\linux\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'

2.打開相同目錄下cef.gyp,根據以下內容替換(--爲待替換,++爲替換後,其實這是一個patch文件,不知道如何用只好手動替換一下 新版本可能已包含了此patch)

複製代碼
@@ -7,7 +7,7 @@
     'pkg-config': 'pkg-config',
     'chromium_code': 1,
     'grit_out_dir': '<(SHARED_INTERMEDIATE_DIR)/cef',
-    'about_credits_file': '<(SHARED_INTERMEDIATE_DIR)/about_credits.html',
+    'cef_about_credits_file': '<(SHARED_INTERMEDIATE_DIR)/cef_about_credits.html',
     'framework_name': 'Chromium Embedded Framework',
     'revision': '<!(python tools/revision.py)',
     'chrome_version': '<!(python ../build/util/version.py -f ../chrome/VERSION -t "@MAJOR@.@MINOR@.@BUILD@.@PATCH@")',
@@ -659,26 +659,26 @@
       ],
     },
     {
-      'target_name': 'about_credits',
+      'target_name': 'cef_about_credits',
       'type': 'none',
       'actions': [
         {
           'variables': {
             'generator_path': '../tools/licenses.py',
           },
-          'action_name': 'generate_about_credits',
+          'action_name': 'cef_generate_about_credits',
           'inputs': [
             # TODO(phajdan.jr): make licenses.py print inputs too.
             '<(generator_path)',
           ],
           'outputs': [
-            '<(about_credits_file)',
+            '<(cef_about_credits_file)',
           ],
           'hard_dependency': 1,
           'action': ['python',
                      '<(generator_path)',
                      'credits',
-                     '<(about_credits_file)',
+                     '<(cef_about_credits_file)',
           ],
           'message': 'Generating about:credits.',
         },
@@ -689,7 +689,7 @@
       'target_name': 'cef_resources',
       'type': 'none',
       'dependencies': [
-        'about_credits',
+        'cef_about_credits',
       ],
       'actions': [
         {
@@ -697,7 +697,7 @@
           'variables': {
             'grit_grd_file': 'libcef/resources/cef_resources.grd',
             'grit_additional_defines': [
-              '-E', 'about_credits_file=<(about_credits_file)',
+              '-E', 'about_credits_file=<(cef_about_credits_file)',
             ],
           },
           'includes': [ '../build/grit_action.gypi' ],
複製代碼

七、開始編譯生成

python automate-git.py --download-dir=e:\ws\source --depot-tools-dir=e:\ws\depot_tools --branch=2357 --checkout=d66017718b0f0d44da42b706c3c2aa5c0c103852 --no-debug-build --force-build

等待兩三個小時即可編譯完成,偶然出錯退出則加入--no-update重新執行,會繼續上次的生成。

 

八、參考資料

https://bitbucket.org/chromiumfx/chromiumfx/overview

https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md#markdown-header-automated-method

https://github.com/cefsharp/cef-binary/wiki/Building-Cef-from-source

http://cefbuilds.com/

http://blog.csdn.net/chromium_webkit/article/details/8575629


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