由于chrome目前不支持NPAPI,项目中需要用到NPAPI控件,所以尝试编译低版本的chrome;
关于3.2357.1287.g861c26e、3.2526.1373.gb660893、3.2623.1397.gaf139d7 的编译版本,三个都支持MP3\MP4。下载地址:
以下是自己研究一些整理资料:
cef和chrome的关系: chrome代码是谷歌浏览器的开源库,CEF则是chrome提供给其他语言调用的接口,CEF类似于chrome接口的一个封装;
Xilium.CefGlue则是对CEF的再次保证,提供给.NET调用
cef的源码:https://bitbucket.org/chromiumembedded/cef/
chrome的源码:https://chromium.googlesource.com/chromium/
cef编译版本:http://opensource.spotify.com/cefbuilds/index.html
这个编译版本下载下来,比如:cef_binary_3.3396.1779.g36f9eab_windows32.tar.bz2 可以用CMake生成VS的工程,可以修改cefclient和cefsimple的代码,但是改不了chrome的源码,当然也改不了支持MP3\MP4;
关于CEF版本对NPAPI的支持,和谷歌官方说的可能不一样,官方说是43版本最后一个支持的,其实不然,49版本是最后一个支持的,只是49版本阉割了NPAPI的网络模块,导致依赖NPAPI接口的flash和siverlight,都不能用了,说了,严格意义上 45版本是最后一个完整支持NPAPI的;当然谁有兴趣也可以改下49版本的NPAPI,加上被去掉的网络模块,我尝试过,由于chrome代码改动量太大,每天至少几百个GIT提交,要找到去掉的代码实在太多,不得不放弃了;毕竟不是专业些浏览器的;
废话说了这多,下面是CEF的编译
关于CEF的编译,我尝试编译了3个版本,分别是:3.2357.1287.g861c26e、3.2526.1373.gb660893、3.2623.1397.gaf139d7
这个版本号,是libcef.dll的属性可以看到详细版本号;
编译之前,请自行购买翻墙的软件,建议大家别用SS和SSR代理,因为下载源码的过程,会有GS://的访问,这个SS代理不了,建议大家直接购买VPN或者全局代理的软件;
第一步:环境准备
(1)64位操作系统,Win 7+;
(2)vs2013 update4;
(3)Windows 8.1 SDK
VS编译版本大家可以参考我这个的
第二步:目录创建chrome,chrome下面有3个文件夹:automate、chromium_git、depot_tools
第三步:确点checkout版本
比如CEF版本是3.2526.1373.gb660893
访问:https://bitbucket.org/chromiumembedded/cef/commits/branch/2526
切换到2526分支,可以看到b660893对应的是2526最新的分支,
checkout的值是b660893c6e800374d2b908a0b56ca47441ea2135;下面我还会讲.NET对应的CEF版本是怎么找的
第四步:下载编译工具:depot_tools
下载地址:https://chromium.googlesource.com/chromium/tools/depot_tools
由于我们编译的版本是比较老的版本,最新的depot_tools编译会有问题,所以最好用GIT切到你要编译的版本对应的日期上,我这边切换到是 这个分支:SHA-1: 1a85b3c9a2c92d4c23c00450a29ecf44f28be6b1,时间点是2016/5/26日,这个自己把握吧,我也是踩坑过来的;
下载下工具后,我们需要手动更新工具,这个更新并不是GIT更新,而是depot_tools的工具下载更新;我们首先要关掉GIT 的更新;
打开 update_depot_tools文件,set DEPOT_TOOLS_UPDATE=0
CMD执行 update_depot_tools.bat ;
depot_tools的目录添加到环境变量path中,最好放在前面点,可能和已经安装好的python git svn冲突
记住:python 、git 、svn、depot_tools都 需要再环境变量里,没有的自己安装检查;python 是2.7的版本即可
第五步:找到CEF对应分支后,去TOOLS文件夹下载automate-git.py放到 本地automate文件夹;
https://bitbucket.org/chromiumembedded/cef/src/b660893c6e800374d2b908a0b56ca47441ea2135/tools/automate/automate-git.py?at=2526
第六步:下载代码
首先环境变量调整好:
设置:DEPOT_TOOLS_UPDATE=0;
DEPOT_TOOLS_WIN_TOOLCHAIN=0
GYP_GENERATORS=ninja,msvs-ninja
GYP_MSVS_VERSION=2013
在chromium_git目录下,新建个UPDATE.BAT文件,文件写如下指令:
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_DEFINES=buildtype=Official
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_MSVS_VERSION=2013
python ..\automate\automate-git_2526.py --download-dir=D:\chrome\chromium_git --depot-tools-dir=D:\chrome\depot_tools --branch=2526 --no-build --no-distrib --force-clean --force-clean-deps --no-depot-tools-update
经过5-6个小时的等待。20G的代码下载完了,
参数:
// 以下为参数说明
--download-dir 源码下载目录
--depot-tools-dir 工具包目录
--branch 源码分支(默认trunk主分支
--checkout 指定patch版本(默认最近提交 如何确定checkout下文介绍
--no-build 下载完不自动开始编译(我们需要修改编译配置
--no-update 确定源码下载完毕仅重新编译时使用
--force-build 强制编译(发现在有成功编译的时候再编译不会执行,可以加上这个
--no-debug-build 只编译release版本
--no-release-build 只编译debug版本
第七步: 修改支持MP4\MP4\,然后是忽略警告,我以2526版本为例,2357版本太多修改,建议大家别玩这个版本,我玩了好几天:
打开e:\cef\source\chromium\src\cef\cef.gypi,variables节下添加如下即可支持mp3/mp4。
'proprietary_codecs': 1,
'ffmpeg_branding': 'Chrome',
从Chromium的源码third_party\ffmpeg\chromium\config\Chrome\win\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'
common.gypi 修改:
[ 'OS=="win"', {
'defines': [
'_CRT_SECURE_NO_DEPRECATE',
'_CRT_NONSTDC_NO_WARNINGS',
'_CRT_NONSTDC_NO_DEPRECATE',
'_SCL_SECURE_NO_DEPRECATE',
],
'msvs_disabled_warnings': [
4800,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,4251,4702,4456, 4457, 4458, 4459,4312,
],
google_apis.gyp 修改
'msvs_disabled_warnings': [4267,4334, ],
skia_common.gypi 修改
'msvs_disabled_warnings': [4244, 4267, 4334, 4341, 4345, 4390, 4554, 4748, 4800],
第八步编译:
编译时,需要预留40G空间,对是40G,你没看错,你编译完就知道为什么需要40G了
设置系统区域为英语(美国)。(控制面板-区域-管理-更改系统区域设置-英语(美国),电脑重启后生效
在chromium_git目录下,新建个COMEON.BAT文件。其实名字随便取啦;
内如如下:
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_DEFINES=buildtype=Official
set GYP_MSVS_VERSION=2013
set CEF_ARCHIVE_FORMAT=tar.gz
python ..\automate\automate-git_2526.py --download-dir=D:\chrome\chromium_git --depot-tools-dir=D:\chrome\depot_tools --branch=2526 --no-debug-build --verbose-build --force-build --force-distrib --no-update --build-log-file
然后开始漫长的编译过程,force-distrib这个参数我说下,强制发布,不加的话不会生成发布文件,也就是http://opensource.spotify.com/cefbuilds/index.html这个网站下的东东,可以用CMAKE生成工程文件的;
编译完成;
下面关于.NET的调用
.NET调用CEF目前是有3种方式的:
我们现在说的都是CEF3,CEF1是旧的接口,已经没人用了
CefSharp:https://github.com/cefsharp/CefSharp 这个封装的很好,适合新手使用,据说效率不如xilium
xilium.cefglue: https://bitbucket.org/xilium/xilium.cefglue 封装的一般,好在扩展性不错,可自行修改封装
chromiumfx:https://bitbucket.org/chromiumfx/chromiumfx 封装的一般,而且并不太好用;
目前大部分人用的应该是xilium.cefglue,首先这个玩意也是找对应CEF版本的;
访问 https://bitbucket.org/xilium/xilium.cefglue,切换到对应分支,比如:2526分支,找到cefglue工程下的
version.g.s里找到CEF_VERSION为:3.2526.1366.g8617e7c; 还有CEF_API_HASH_PLATFORM_WIN这个对应是cefclient工程下的版本。