首页 > 技术 > 系统 > Windows > [置顶] 在Windows下编译Cef3.2623并加入mp3、mp4支持(附带源码包和最终DLL)

[置顶] 在Windows下编译Cef3.2623并加入mp3、mp4支持(附带源码包和最终DLL)

2017-01-11 浏览()

转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/54193842

之前把离屏渲染模式的Cef3作为控件嵌入到项目窗体里。现在因为工作需要,为了得到支持mp3、mp4的cef32和64位版本,我得编译cef3的2623版本(最后一个支持xp的cef)。没编译之前就知道这是个大坑,果不其然,花了一星期才编译出来。看了不少网上的教程,感觉没有特别完整的,特地把自己的编译过程记录下来,以备后用。

需要专门吐槽一下中国防火墙,一星期中有5天我都花在了翻墙下载代码中。git还不支持断点续传,网络不稳定的话检出代码能气死人啊!!!

准备

  1. 快速稳定的VPN(非常重要,免费的VPN不靠谱,最好花钱买个VPN或者公司有稳定的翻墙。我公司自带翻墙,但是有几个代码检出地址有些问题,导致我检出了5天才下载好代码。这个条件打不到就别指望成功了)
  2. Win7或者更新的系统,必须64位
  3. VS2013 Update4(编译不同版本要求不一样,具体看Cef官网帮助,我用的是VS2013 Update5)
  4. Win10 SDK
  5. 60G剩余空间(用SSD最好,编译速度很依赖CPU和硬盘)
  6. 下载Python并添加到Path环境变量(我的是Python2.7,这个是为了运行脚本)
  7. 添加系统环境变量

    • CEF_ARCHIVE_FORMAT=tar.bz2
    • DEPOT_TOOLS_WIN_TOOLCHAIN=0
    • CEF_USE_GN=0
    • GYP_DEFINES=buildtype=Official
    • GYP_MSVS_VERSION=2013(根据你的VS版本设置)
    • GYP_GENERATORS=ninja,msvs-ninja

VS版本起码要使用官网指定的最低版本;Win10 SDK必须要有,默认安装位置在(C:\Program Files (x86)\Windows Kits\10),没有的话去微软官网下载。

检出代码

  1. 下载automate-git.py 脚本并保存到一个英文目录,最好直接在磁盘根目录建立个简单的目录就好,我的是E:\cef\
  2. 打开cmd切换到你的目录,然后输入命令来下载
python automate-git.py --download-dir=e:\cef\source --branch=2623 --no-build --no-distrib --force-clean

其中--branch=2623是指定要下载的Cef版本;
--no-build --no-distrib是只下载代码而不编译;
--force-clean这个参数用于清理Chromium和Cef的一些检出信息,如果没有一次性下载成功而再次执行下载命令时,需要带上这个参数来清理一些信息,否则检出会失败(第一次下载时直接带上这个参数也可以)。

下载和编译只需要这个一个脚本就可以,脚本会自动下载depot_tools 、Chromium、Cef等源码。如果下载过程中出现错误,就再次执行这个命令直到下载完成。网络稳定的话一次性大概5个小时就能成功,不稳定的话经常会出现错误,我经常碰到错误,所以下载了5天才成功!

考虑到国能很多人被中国防火墙堵死,也为了我以后方便。我专门把下载好的完整源码都打包上传到网盘,如果被墙的朋友可以直接下载我打包好的(PS:这个包我已经把源码中的一些错误修改了,并且加入mp3、mp4支持,可以直接编译,下载地址文章最后给出)

解决各种编译错误

编译2623版本的过程中会遇到一些错误,导致编译失败。Cef编译一次起码就要5个小时,真是消耗不起。

一、添加MP3、MP4支持
打开e:\cef\source\chromium\src\cef\cef.gypi文件,在variables节下添加如下配置信息

'proprietary_codecs': 1,
'ffmpeg_branding': 'Chrome',

分别打开e:\cef\source\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h
和e:\cef\source\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\x64\config.h,在原有配置宏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’

二、ACTION Copying D3D Compiler DLL错误
我最开始就是碰到了这个错误,提示找不到d3dcompiler_47.dll这个文件。后来发现是我的Win10 SDK安装的不完整,导致(C:\Program Files (x86)\Windows Kits\10\Redist\D3D)目录里没有这个DLL文件。解决方法是去微软官网下载安装了最新的Win10 SDK。

三、e:\cef\source\chromium\src\ui\gl\gl_bindings_skia_in_process.cc(860)
在编译配置文件里去掉这两个文件就可以:gl_bindings_skia_in_process.cc和 gl_bindings_skia_in_process.hh

打开src/ui/gl/BUILD.gn和gl.gyp文件,查找这两个代码文件并删掉。详见https://codereview.chromium.org/1673323002

四、egl语法/类型错误
修改h:\ws\source\chromium\src\third_party\swiftshader\include\egl\eglext.h,
在62行后加入typedef EGLAttribKHR EGLAttrib;

五、无法识别的符号_ff_w64_guid_data
修改chromium/third_party/ffmpeg / ffmpeg_generated.gypi,
在行’libavformat/vorbiscomment.c’,后加入’libavformat/w64.c’,

六、e:\cef\source\chromium\src\cef\libcef\browser\browser_host_impl.cc(666): error C2039
查找gyp文件,把print_view_manager_base.h和print_view_manager_base.cc,放到print_view_manager.h和print_view_manager.cc前面

七、屏蔽编译时的警告,编译的时候出现警告会暂停编译
在src\build\common.gypi文件中:搜索'msvs_disabled_warnings',设置其中的值为(我搜索到了好几处,每一处都这样设置了):

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,4800,4251,4702,4456, 4457, 4458, 4459,4312,

编译代码

  1. 编译前一定要设置系统区域为英语(美国)并重启,否则因为编码的源码会导致编译不通(控制面板-区域-管理-更改系统区域设置-英语(美国)
  2. 打开cmd切换到你的目录,然后输入命令来编译
python automate-git.py --download-dir=e:\cef3\source --branch=2623 --no-update --no-debug-build --build-log-file --verbose-build --force-distrib --force-build

其中--no-update是让脚本不再更新代码,因为我们已经下载完毕了;
--no-debug-build是只编译release版本,这样编译速度会快很多,--no-release-build可以只编译debug版本;
--force-distrib --force-build用于强制编译cef代码;
--build-log-file --verbose-build用于输出编译日志到e:\cef\source目录,名字为build-2623-release.log,这个很重要,如果编译发生错误,可以打开这个日志文件并通过搜索关键字FAILED来查找发生错误的文件;
如果需要64位版本,则添加--x64-build参数

参考资料

Cef官网帮助
http://www.cnblogs.com/hezhixiong/p/5935143.html
http://www.cnblogs.com/longxiang92/p/6141653.html?utm_source=itdadao&utm_medium=referral
http://blog.csdn.net/yufei_lgq/article/details/53838270
http://blog.csdn.net/qsy2000/article/details/52845895?locationNum=12&fps=1

总结

最终Dll输出路径为:

e:\cef\source\chromium\src\out\Release
e:\cef\source\chromium\src\cef\binary_distrib

这里写图片描述

这里写图片描述

这里写图片描述

源码包下载地址:点我下载
最终Dll下载地址(release、debug、x64):点我下载
如果网盘失效了,就直接联系我,我再上传
Redrain QQ:491646717 2017.1.8

相关推荐

感谢关注 Ithao123Windows频道,ithao123.cn是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!

关键词:

文章点评:


精选专题

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。 Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。

产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。