一、什么是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. javascript 心得

    1.&&和||等逻辑判断运算标记可以当成条件运算来使用例如: var a =  b = c = "12"; (a=="13"&& ...

  2. 委托、Lambda表达式和事件

    1.1 引用方法      委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用.      Lambda 表达式 ...

  3. 学习 opencv---(5) 创建Trackbar(活动条) &图像对比度,亮度值调整

    学习如何在opencv 中用trackbar 函数创建和使用 轨迹条,以及图像对比度,亮度值的动态调整 一.OpenCV中轨迹条(Trackbar)的创建和使用 [1]创建轨迹条-----create ...

  4. soft-margin SVM

    1. soft-margin SVM的形式 其中ξn表示每个点允许的犯错程度(偏离margin有多远),但是犯错是有代价的,也就是目标函数里面要最小化的.c控制对犯错的容忍程度. 2. 推导soft ...

  5. Docker - 入门

    术语 1. 镜像(image)与容器(container) 镜像是指文件系统快照或tar包. 容器是指镜像的运行态(时) 2.宿主机管理 设置/配置一台物理服务器或虚拟机,以便用于运行Docker容器 ...

  6. sz rz SecureCRT

    yum install lszrz apt-get install lszrz wget http://down1.chinaunix.net/distfiles/lrzsz-0.12.20.tar. ...

  7. mybatis如何做分页处理

    1.首先根据自己实际需求编写实体类 import java.io.Serializable; public class User implements Serializable{ //最好将该实体类序 ...

  8. python 旋转数组

    #!/usr/bin/env python3 #-*-encoding:utf-8-*- l = [] u = [] q = 5 xx=[[col for col in range(q)] for r ...

  9. C++根据图片url下载图片

    需要使用到URLDownloadToFile()函数,该函数在头文件<urlmon.h>中声明. URLDownloadToFile()函数的定义如下: HRESULT URLDownlo ...

  10. php 导出excle的.csv格式的数据时乱码问题

    1.header('Content-Encoding: XXXX'); 有可能是编码问题:可以尝试UTF-8,GBK,GB2312,等编码格式 2.有可能是文件编码问题,虽然UTF-8不建议带BOM, ...