一、什么是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

 e:
cd e:\ws
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= --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= --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

												

最新文章

  1. Photo Shop 修改、维护
  2. iOS开发——高级篇——地理定位 CoreLocation
  3. Java 继承 执行顺序
  4. poj 2192 (DP)
  5. 用过滤器和装饰者设计模式(静态代理)解决getParameter乱码问题
  6. TypeScript 学习二 表达式和循环
  7. PHP 实现定时任务的几种方法
  8. 使用react native制作的一款网络音乐播放器
  9. Android为TV端助力 帧动画
  10. Centos 7.3下 Linux For SQL Server安装及配置介绍
  11. Linux系统开发之路-上
  12. MySQL 三 通过yum源安装指定版本的mariadb
  13. Long polling failed, will retry in 16 seconds. appId: zeus-guard, cluster: default, namespaces: application, long polling url: null, reason: Get config services failed from&#183;&#183;&#183;
  14. docker-compose 在线安装升级
  15. Java动手及实验整理
  16. WPF 触摸屏小键盘样式
  17. APP Inventor 基于网络微服务器的即时通信APP
  18. Docker - vim安装
  19. Java Integer和String内存存储
  20. JVM 监控以及内存分析

热门文章

  1. 【Android自学日记】使用DatePicker以及TimePicker显示当前日期和时间
  2. 转:C++项目中的extern &quot;C&quot; {}
  3. Xcode will continue when iPad is finished. &quot;Could not find Developer Disk Image&quot;
  4. python note
  5. C#夯实基础之多线程三:线程的优先级
  6. fiddler ios 手机抓包
  7. 内存动态分配之realloc(),malloc(),calloc()与new运算符
  8. Markdown 语法说明(持续更新-20160822)
  9. js中JSON格式数据的转化
  10. ftp org.apache.commons.net.ftp.FTPClient 判断文件是否存在