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

												

如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持的更多相关文章

  1. 如何在centos7上安装源码包

    在我们使用linux的过程中,有很多程序是通过红帽官网给的系统中安装的,但是一般来说,系统更新的速度比较慢,如果这个时候我们又想用最新版的该怎么办呢?总不能一直等系统升级吧╮(╯﹏╰)╭所以,我们可以 ...

  2. 记一次在mac上源码编译curl,使其支持NSS的过程

    一.背景 在一次学习https原理的过程中,希望客户端指定特定的cipher suites来抓包分析SSL/TLS的握手过程,就想到了使用curl工具,而不是使用浏览器. 接下来使用man curl找 ...

  3. 详解如何在linuxmint上用源码包安装nodejs

    第一步:安装依赖包   因为Linuxmint 和 Ubuntu 同属 Debian系的Linux,而且Linuxmint是建立在Ubuntu的基础上的,所以Ubuntu下的命令和包,Linuxmin ...

  4. 在CentOS7上从源码编译安装redis,并做成服务程序

    1.安装编译的依赖环境 # 安装pcre开发包: yum install -y pcre-devel # 安装ssl功能需要openssl库 yum -y install openssl-devel ...

  5. windows中obs源码编译的坑

    好用的版本: cmake-3.6.1-win64-x64  +  vs2015  + qt-opensource-windows-x86-msvc2015_64-5.7.0   +   obs-stu ...

  6. [Part 4] 在Windows 10上源码编译PCL 1.8.1支持VTK和QT,可视化三维点云

    本文首发于个人博客https://kezunlin.me/post/2d809f92/,欢迎阅读! Part-4: Compile pcl with vtk qt5 support from sour ...

  7. 在CentOS上以源码编译的方式安装Greenplum数据库

    集群组成: 一台主机,一台从节点. 系统环境: 操作系统:CentOS 7,64位,7.4.1708(/etc/redhat-release中查看) CPU:AMD Fx-8300 8核 内存:8GB ...

  8. [Part 3] 在Ubuntu 16.04源码编译PCL 1.8.1支持VTK和QT

    本文首发于个人博客https://kezunlin.me/post/137aa5fc/,欢迎阅读! Part-3: Install and Configure PCL 1.8.1 with vtk q ...

  9. 在 Ubuntu 上使用源码安装 OpenResty

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 本文将介绍如何在 Ubuntu 上使用源码安装 OpenResty. 目标 Ubuntu 18.04 OpenResty 1.19.3.2 安装依 ...

随机推荐

  1. Visual Studio的背景插件

    分享一个Visual Studio的背景插件,让堆码更富情趣..哈哈   忘记一件重要的事情,我使用的是VS 2012版,其他更高版本应该是可以找到的,以下版本就不清楚了.有可能找不到,见谅,也不是我 ...

  2. AM335x kernel4.4.12 LCD 时钟翻转设置记录

    TI AM335x kernel 4.4.12 LCD display 时钟翻转记录 因为公司硬件上已经确定LCD 转LVDS 转换芯片上确认以上升沿时钟为基准,所以只能在软件上调整相关东西. 入口在 ...

  3. 我的LaTeX中文文档模板

    中文LaTeX处理模板 环境MiTex内核 编辑环境WinEdit 源码如下: \documentclass[a4paper,12pt]{article} \usepackage{CJK} %设定字号 ...

  4. oracle 学习笔记(三)

    1. SQL(基础查询) 1.1. 基本查询语句 1.1.1. FROM子句 SQL查询语句的语法如下:   SELECT <*, column [alias], -> FROM tabl ...

  5. docker 初探之简单安装 ----Windows10

    报错一 $ docker run hello-world Unable to find image 'hello-world:latest' locally Pulling repository do ...

  6. 对偶SVM

    1.对偶问题的推导 为什么要求解对偶问题?一是对偶问题往往更容易求解,二是可以自然的引入核函数. 1.1 用拉格朗日函数将原问题转化为"无约束"等价问题 原问题是: 写出它的拉格朗 ...

  7. MVC安全防护

    一.XSS攻击 跨域脚本攻击(Cross Site Scripting),恶意植入前端代码,比如HTML代码和客户端脚本,异常js获取用户cookie然后跳转到别的站点. 防护措施 标签转换(如&qu ...

  8. oracle11gR2静默安装

    oracle11G静默安装过程——linux环境 1.操作系统及Oracle版本 Linux版本:CentOS release 6.8 (Final) Oracle版本:Oracle Database ...

  9. iOS getter setter

    getter setter 给成员变量起名字用的 setter方法 设置成员变量值 1. setter 方法一定是对象方法 不可能是类方法 2.一定没有返回值 3. 以set开头,并且set后面跟上需 ...

  10. CPrimerPlus第11章第10题

    题目: 编写一个程序,读取输入,直到读入了10个字符串或遇到EOF,由二者中最先被满足的那个终止读取过程.这个程序可以为用户提供一个有5个选项的菜单:输出初始字符串列表.按ASCII顺序输出字符串.按 ...