本文主要参考资料来源官方wiki文档:官方wiki文档
环境准备
1.windows X64环境,win7和win10都可以
2.VS环境,安装VS环境后记得配置SDK系统环境,此处使用VS2017(注意:CEF版本使用的VS版本也不同,具体查看官网CEF对应VS版本)。
3.python环境,切记使用python2,automate-git.py脚本使用的是python2
4.git环境,便于拉取源码
5.稳定的外网条件,下载源码需要外网条件
6.足够的存储内存,源码下载后大概占用四五十G内存,建议100g存储空间
源码下载工作
1.下载源码前先创建工作目录
C:/code/
automate <-- 存放CEF构建脚本
chromium_git <-- 存放运行脚本
depot_tools <-- 谷歌构建工具
2.下载CEF构建脚本automate-git.py,存放到C:/code/automate目录下
下载地址:automate-git.py
3.下载谷歌构建工具
可以直接通过链接下载
depot_tools.zip
下载后是个压缩文件,需要解压到文件夹depot_tools,目录一定要是这个,下载后会自动形成git仓库。
也可以通过git仓库拉取到depot_tools文件夹中
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
4.解压depot_tools.zip到depot_tools文件夹后,需要将C:/code/depot_tools路径设成系统环境变量
5.进入depot_tools目录下找到update_depot_tools.bat运行更新,脚本能帮下载git和python,以及更新最新谷歌构建工具,详情可以看看基本代码内容
6.在chromium_git创建update.bat脚本,该脚本可以整合后续所有cmd指令操作。
::如果之前编译过,想重新编译
::set DEPOT_TOOLS_WIN_TOOLCHAIN=0
::激活 ffmpeg 内部解码器,也可以下载之后激活
set GN_DEFINES=ffmpeg_branding=Chrome proprietary_codecs=true is_official_build=true
set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/*
python ..\automate\automate-git.py --download-dir=c:\code\chromium_git --depot-tools-dir=c:\code\depot_tools --branch=4389 --no-build --no-distrib --force-clean
根据官方文档介绍
1).GN_DEFINES 参数介绍
ffmpeg_branding 和 proprietary_codecs 表示开启部分多媒体编解码支持,后面介绍如果开启支持全部
is_official_build 决定了是否是编译正式版本,指定该参数为 true 基本上都是为了产品发布使用,同时也会在创建解决方案的时候生成带有 sandbox 的解决方案(如 Release_GN_x86_sandbox),而不指定这个参数是没有的。如果你不是为了贡献代码,那默认这个都加上吧。
use_jumbo_build 官方资料默认指定,表示是否启用试验性的jumbo编译,编译过程会加快,但是占用 CPU 和内存(尤其是内存)会剧增。
is_component_build 官方资料默认指定,但我们没有开启,这个参数表示是否启用组件化编译,设置为 true 以后,base、ffmpeg 等等都会被编译为动态库,使用时也是动态链接,编译出来的 cef_sandbox.lib 只有几兆大小,并且你需要复制很多dll 文件到项目目录下才能运行。
2).automate-git.py 参数介绍
可以通过cmd执行automate-git.py –help查看
--branch 表示你要下载的版本代码,CEF 每个版本都有固定的分支
--no-build 表示只下载代码而不编译,这里只为下载代码
--no-distrib 不执行打包项目,这里只为下载代码
--force-clean 如果你曾经执行过这个脚本,可能会出错,则加上这个参数,它执行清理残留文件
--no-update :不更新cef和chromium源码
--no-depot-tools-update : 不更新depot-tools源码
--verbose-build : 开启编译日志,该参数比较重要,编译出错时方便定位问题,相关编译错误见下节
--force-build : 强制编译。在编译失败时,重新运行脚本能重新编译,不加该参数,则会提示out目录已存在
--no-debug-build : 不进行debug版本的编译,默认debug和release一起编译,同理--no-release-build不编译release版本
--force-distrib :强制发布二进制包,如果已经发布过,再次运行脚本会重新生成二进制发布包
7.执行update.bat即可下载源码
ps:由于网络问题,换到了win10上下载
下载过程漫长,容易出现中断情况,可以继续运行脚本下载,可以接着上次下载中断位置下载。
这是我下载后的包
激活ffmpeg编解码功能,开启完整的多媒体功能
ffmpeg_branding 和 proprietary_codecs 能开启部分多媒体编解码支持
开启更多需要去修改 ffmpeg 的头文件
chromium_git\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h
修改你要开启的编解码能力宏为 1 即可
或者找到原有配置宏FFMPEG_CONFIGURATION,在里面增加以下配置:
–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’
#define CONFIG_SIPR_PARSER设置为1,不然后续编译可能会出现找不到指定变量
源码编译
1. 创建工程文件
在c:\code\chromium_git\chromium\src\cef\目录下创建create.bat脚本,并写入以下代码:
::is_official_build=true创建release版本,is_component_build=true创建debug版本
set GN_DEFINES=ffmpeg_branding=Chrome proprietary_codecs=true is_official_build=true
set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/*
call cef_create_projects.bat
运行create.bat后,会在chromium_git\chromium\src\out目录下创建Releas_GN_x86目录(因为脚本设置的是is_official_build<release版本>),并在其目录生成ninja和VS工程cef.sln文件。
cd c:\code\chromium_git\chromium\src\cef
create.bat
可以使用vs打开cef.sln工程文件来编译单个文件,需要64位版本就选择X64版本,32位版本就选择X86,始终用ninja来构建完整的项目。
2.编译 CEF
根据之前create.bat创建的Release 还是 Debug 版本,使用Ninja创建并编译,并多次重复此步骤以在开发时执行增量构建
cd c:\code\chromium_git\chromium\src
ninja -C out\Release_GN_x86 cef
3.编译 sandbox
以下步骤编译具有完整功能的cef_sandbox.lib
cd c:\code\chromium_git\chromium\src
ninja -C out/Release_GN_x86_sandbox cef_sandbox
工程打包
用” Release”替换” Debug”以生成发行版本
–minimal 表示仅发布 Release 版本,不包含 Debug
cd c:\code\chromium_git\chromium\src\cef\tools
./make_distrib.sh --ninja-build --minimal
打包完成后能在 c:\code\chromium_git\chromium\src\cef\binary_distrib 目录下就可以看到打包过的文件了
测试实例效果
将打包的工程放入之前的Cef项目看能否播放视频