CEF 是一个基于google chromium的简单的框架。 它主要是作为一个内嵌浏览器嵌入到客户端应用程序中。
领导有洁癖,不敢用第三方编译好的CEF组件。 自己编译开源工程,好处挺多的,以后想改个啥,自己说了算。
先查资料,看前面的同学咋玩的。 因为前面同学编译的CEF版本不一样,过程也不一样,说法不一。
有的同学不光改配置,而且去动人家的cpp. 跟领导学了一下,被领导一顿训。 确实,这么大的第三方组件,没看懂人家实现时,怎么能去动人家的实现呢?动一行也不允许哦。
最后,只改工程配置,确实可以编译出完全支持HTML5的CEF. 去拿YouTube做测试,音频和视频都支持的很好,美美的。
开源大工程编译,是重度下载编译型的任务。 一般情况,只需要改对配置文件,然后就是下载和编译的漫长等待了。
https://bitbucket.org/chromiumembedded/cef
git clone https://bitbucket.org/chromiumembedded/cef.git
https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart.md
Win10专业版(1809.177763.503) i7-7820X (3.6GHZ, 8核16线程 ) 64GB内存 256MB-SSD系统盘 1TB-SSD工作盘 Visual Studio 2017 -企业版 15.9.7,已经按照chromium68的编译环境,配置好了要安装的VS组件。
这步是其他同学实验上说的,这步可能有用。
这步照网上同学资料上设置的,官方文档并没有说明. CEF_ARCHIVE_FORMAT=tar.bz2 DEPOT_TOOLS_WIN_TOOLCHAIN=0 CEF_USE_GN=0 GYP_DEFINES=buildtype=Official GYP_MSVS_VERSION=2017 GYP_GENERATORS=ninja,msvs-ninja
后来做通实验后,看到有些环境变量,其实有些是update.bat和create.bat中指定的环境变量。 这步如果不设置,不知道是不是对下边编译工程由影响,没有副作用就好。 感觉这步是没用的,因为官方指南没说。 但是,将这些环境变量拿掉,再从头做一遍,也划不来,一天就废了。没有副作用就好。 因为以前在本机做过chromium68的实验,将环境变量和编译CEF和chromium相关的摘出来,记录一下
实验分3轮,能清晰的看到修改前后的效果比对。 按照这3轮的实验步骤,可以确定工程编译的方向性问题。 不至于出了编译问题,不好找问题的原因。
第1轮: 直接git最新的Master版本,按照官方指南,下载编译成功。 通过开源工程的测试例子,看看原版的特性支持。 这一轮,主要熟悉一下官方编译指南。
第2轮: 挑一个指定版本,按照官方指南,下载编译成功。 通过开源工程的测试例子,看看原版的特性支持。 这一轮,主要看看自己关心的这个版本,是否和当前的编译环境匹配不?
第3轮: 对自己指定的版本,修改配置,加入新特性支持。下载编译成功。 通过开源工程的测试例子和第三方的检测页面,看看新特性是否已经加入。 然后就可以找有新特性支持的站点,进行测试,看看效果咋样。
下载工程
整个速度快, 稳定的梯子, 来下载官方工程。 CEF的下载内容有13GB, 如果下载到中间网断了,那真杯具。
严格按照官方说明(https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart.md)来操作 工程所在的盘选为1TB的SSD, 盘符为X盘。
新建目录
x:\code x:\code\automate x:\code\chromium_git 下载https://storage.googleapis.com/chrome-infra/depot_tools.zip 解压到到 x:\code\depot_tools目录 运行 update_depot_tools.bat cd x:\code\depot_tools update_depot_tools.bat 下载 https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py ,放到 x:\code\automate\automate-git.py 制作脚本x:\code\chromium_git\update.bat
set GN_DEFINES=use_jumbo_build=true set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/* python ..\automate\automate-git.py --download-dir=x:\code\chromium_git --depot-tools-dir=x:\code\depot_tools --no-distrib --no-build Pause这一步只是下载,不编译。 参数 --no-build :不编译 参数 --no-distrib :不发布
下载CEF工程 这步很悲剧,外网千万不能断. 如果网断了,就要从头开始下载13GB的代码… 在开始下载前, 先烧柱香,拜拜菩萨:) 我的运气还行, 只断了一次(在下载了6GB时). 看资料上的一个同学,一个星期都在下代码:P
cd x:\code\chromium_git update.bat建立create.bat x:\code\chromium_git\chromium\src\cef\create.bat
rem x:\code\chromium_git\chromium\src\cef\create.bat set GN_DEFINES=use_jumbo_build=true set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/* call cef_create_projects.bat Pause运行create.bat
Cd /d x:\code\chromium_git\chromium\src\cef\ create.bat运行create.bat, 打了patch, 产生了工程文件cef.sln x:\code\chromium_git\chromium\src\out\Debug_GN_x86\cef.sln x:\code\chromium_git\chromium\src\out\Debug_GN_x64\cef.sln x:\code\chromium_git\chromium\src\out\Release_GN_x86\cef.sln x:\code\chromium_git\chromium\src\out\Release_GN_x64\cef.sln 用ninja来编译工程
cd /d x:\code\chromium_git\chromium\src可以编译以下4种工程配置
ninja -C out\Debug_GN_x86 cef ninja -C out\Debug_GN_x64 cef ninja -C out\Release_GN_x86 cef ninja -C out\Release_GN_x64 cef如果要单独编译Release_x86版本,运行下列命令
ninja -C out\Release_GN_x86 cef运行编译出的CEF应用的例子程序 官方整这步,主要是让开发者看下效果. 官方说 : 看,编译成功,可以运行,不要赖我哦。
cd /d x:\code\chromium_git\chromium\src out\Release_GN_x86\cefclient.exe查看CEF的版本信息 在cefclient.exe中的url栏输入chrome://version, 可以看到CEF和chromium的版本。
CEF75.0.0-master.1986+g35295d2+chromium-75.0.3749.0Chromium75.0.3749.0OSWindowsWebKit537.36 (@ffee52ed13b5cdf6e41886af8562a5be5294a7a5)JavaScript7.5.128FlashUser AgentMozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3749.0 Safari/537.36Command Line"out\Release_GN_x86\cefclient.exe" --lang=en-US --log-file="x:\code\chromium_git\chromium\src\out\Release_GN_x86\debug.log" --disable-gpu-shader-disk-cache --file-url-path-alias="/gen=x:\code\chromium_git\chromium\src\out\Release_GN_x86\gen"Module Pathx:\code\chromium_git\chromium\src\out\Release_GN_x86\libcef.dllCache Path查看CEF支持的HTML5特性 在测试程序cefclient.exe的url栏中输入http://html5test.com/ 或在测试程序cefclient.exe中选择菜单 可以看到官方版本不支持MP4, H264, H265 但是支持MP3 这时,可以备份这个版本了。防止后续实验不行了,还有个还原点可用。重新下载13GB的代码,纯粹在浪费时间。 因为工程中有不存在的文件夹快捷方式,最好用7zip分卷压缩保存成备份.7z. 用windows自带的拷贝文件夹的功能,拷贝到其他盘,会因为文件夹快捷不存在,拷贝过程挂住,只能取消。
实验证明,如果要从这个官方master版本,update到自己中意的某个发布版本,是编译不过的。 如果不带update.bat 不带 --force-clean,只带 --branch=3729。 其实不太确定,因为第一次玩CEF编译,实验过程改来改去。实验都没过,除了参考资料的url, 其他中间记录自然也就没意义。 如果要靠谱的话,还是从头update到自己指定的版本。
还是要从头下载编译一个指定版本。
要从头来了,将第1轮实验的目录改名吧。 如果不改名,因为新的update.bat指定了–force-clean 参数,也会清掉第一轮的下载内容
新建目录 x:\code x:\code\automate x:\code\chromium_git 制作脚本x:\code\chromium_git\update.bat 这个update.bat,指定了 --branch=3729, 下载3729版本。 参数 --force-clean,指定清除所有非本次下载的代码。
之所以下载3729版本,是因为在第一轮实验完成后,用git可以看到离master版本最近的发布版本是3729. 而且本次实验,不需要回到winxp能用的版本,那就选择最新能用的发布版本。
rem X:\code\chromium_git\update.bat set GN_DEFINES=use_jumbo_build=true set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/* python ..\automate\automate-git.py --branch=3729 --download-dir=x:\code\chromium_git --depot-tools-dir=x:\code\depot_tools --no-distrib --no-build --force-clean pause建立create.bat update.bat运行完后,x:\code\chromium_git\chromium\src\cef\目录中应该是有cef_create_projects.bat和一堆其他文件,如果这个目录是空的,就要重新运行update.bat. create.bat内容和第1轮一样。
x:\code\chromium_git\chromium\src\cef\create.bat rem x:\code\chromium_git\chromium\src\cef\create.bat set GN_DEFINES=use_jumbo_build=true set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/* call cef_create_projects.bat pause运行编译出的CEF应用的例子程序 cd /d x:\code\chromium_git\chromium\src out\Release_GN_x86\cefclient.exe 在cefclient.exe中运行chrome://version, 可以看到CEF和chromium的版本。 可以看到编译出的版本确实为3729(74.0.3729.157) 可以看出CEF的发布版本是随着chromium走的。
CEF 74.1.19+gb62bacf+chromium-74.0.3729.157 Chromium 74.0.3729.157 OS Windows WebKit 537.36 (@7b16107ab85c5364cdcd0b2dea2539a1f2dc327a) JavaScript 7.4.288.28 Flash User Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36 Command Line “out\Release_GN_x86\cefclient.exe” --lang=en-US --log-file=“x:\code\chromium_git\chromium\src\out\Release_GN_x86\debug.log” --disable-features=NetworkService --disable-gpu-shader-disk-cache --file-url-path-alias="/gen=x:\code\chromium_git\chromium\src\out\Release_GN_x86\gen" Module Path x:\code\chromium_git\chromium\src\out\Release_GN_x86\libcef.dll Cache Path 这个3729的官方版本同样是没有h264支持的。
保存实验目录的备份 防止后续实验不行了,还有个还原点可用。重新下载13GB的代码,纯粹在浪费时间。 因为工程中有不存在的文件夹快捷方式,最好用7zip分卷压缩保存成备份.7z. 用windows自带的拷贝文件夹的功能,拷贝到其他盘,会因为文件夹快捷不存在,拷贝过程挂住,只能取消。
这版实验,就可以在第2轮的基础上做了。
可以用上第2轮的大部分内容,不会导致下载很多代码。 因为在update.bat和create.bat中加入了h264的配置,版本都一样。 只会更新很少的内容(大约几万个文件),网络正常的话,有10分钟就完事。
在update.bat和create.bat中set GN_DEFINES后增加如下属性 is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
新版update.bat的内容
rem X:\code\chromium_git\update.bat rem set GN_DEFINES=use_jumbo_build=true set CEF_USE_GN=1 set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/* rem python ..\automate\automate-git.py --branch=3729 --download-dir=x:\code\chromium_git --depot-tools-dir=x:\code\depot_tools --no-distrib --no-build python ..\automate\automate-git.py --branch=3729 --download-dir=x:\code\chromium_git --depot-tools-dir=x:\code\depot_tools –no-update --no-distrib --no-build pause新版create.bat的内容。
rem x:\code\chromium_git\chromium\src\cef\create.bat set CEF_USE_GN=1 set GN_DEFINES=is_win_fastlink=true proprietary_codecs=true ffmpeg_branding=Chrome set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/* call cef_create_projects.bat Pause先运行新版的update.bat 再运行新版的create.bat 再编译工程。
cd /d x:\code\chromium_git\chromium\src ninja -C out\Release_GN_x86 cef测试是否CEF已经加入了H264功能,是否支持HTML5.
先用CEF带的例子看是否有H264
cd /d x:\code\chromium_git\chromium\src out\Release_GN_x86\cefclient.exe可以看到已经加入H624支持了 再测试下,是否支持HTML5 测试url 为 https://www.youtube.com/html5/ 在out\Release_GN_x86\cefclient.exe的url输入栏中输入 https://www.youtube.com/html5/ 说明,加入H264的CEF也完全支持HTML5.
看了那么多参考资料,觉得还是stackoverflow大法好
https://blog.csdn.net/baidu_32237719/article/details/79509819
https://stackoverflow.com/questions/43845493/how-to-enable-h264-support-in-cef3-latest-version/45404590#45404590
https://magpcss.org/ceforum/viewtopic.php?f=6&t=13515&start=40#p35221
https://blog.csdn.net/qpshen/article/details/78559710 https://blog.csdn.net/sum0000/article/details/86645083 https://blog.csdn.net/u012814856/article/details/76263059 https://blog.csdn.net/qpshen/article/details/78559710 https://blog.csdn.net/zhuhongshu/article/details/54193842 https://blog.csdn.net/baidu_32237719/article/details/79509819 https://blog.csdn.net/yufei_lgq/article/details/53838270