在Windows上编译 CEF3 且加入mp3/mp4的支持

现在因为工作需要,为了得到支持mp3、mp4的cef32和64位版本,需要编译cef3,本次编译版本是3239(6.0.3239.132)。


一、编译条件
1.可用于稳定的下载网络
2.Win7或者更新的系统,必须64位,至少8GB的RAM,我采用win10 64位,16GRAM
3.比较新的VS,最近免费的社区版(编译不同版本要求不一样,具体看Cef官网帮助,我用的是VS2017),需要安装“C++桌面组件” 和 “MFC和ATL支持”,最好安装在默认路径,VS2017还需要特殊配置
4.Win10 SDK(官方10.0.15063,VS2017中有)
5.至少100G剩余空间(官方要求),NTFS文件系统,部分文件超过4G,部分资料显示最少60G,编译结束后发现远超60G

二、准备工作
1.设置系统区域为英语(美国)。(控制面板-区域-管理-更改系统区域设置-英语(美国)),设置完需要重启
2.创建工作目录,路径不能包含空格及特殊字符。例如e:\cef
3.下载编译工具包,解压至工作目录。例如e:\cef\depot_tools
4.下载编译脚本至工作目录。例如e:\cef
5.在工作目录下创建源码目录。例如e:\cef\source
6.添加系统环境变量

  set CEF_USE_GN=1
        set GN_DEFINES=is_official_build=true
        set GYP_DEFINES=buildtype=Official
        set GYP_MSVS_VERSION=2017
        set CEF_ARCHIVE_FORMAT=tar.bz2

Path添加e:\cef\depot_tools,为避免与已安装的python或git冲突,写在path靠前位置。
 若环境变量设置后任有问题,在cmd使用set设置,例如:set DEPOT_TOOLS_WIN_TOOLCHAIN=0

    完整目录结构:
    e:/ 
        cef/
            automate-git.py
            depot_tools/
            source/

三、网络环境

请查看我的Github查看该部分

四、检出代码

1.切换到工作目录e:\cef
2.使用命令下载源码

python automate-git.py --download-dir=e:\cef\source --branch=3239 --no-build --no-distrib --force-clean

其中–branch=3239是指定要下载的Cef版本;
–no-build --no-distrib是只下载代码而不编译;
–force-clean这个参数用于清理Chromium和Cef的一些检出信息,如果没有一次性下载成功而再次执行下载命令时,需要带上这个参数来清理一些信息,否则检出会失败(第一次下载时直接带上这个参数也可以)。
下载和编译只需要这个一个脚本就可以,脚本会自动下载depot_tools 、Chromium、Cef等源码。如果下载过程中出现错误,就再次执行这个命令直到下载完成。
网络调通以后不会有太多问题,下载时间和网络速度有关,我用了5个小时多些全部下载完成。

五、编译代码

1.添加MP3、MP4支持

source\chromium\src\third_party\ffmpeg\chromium\scripts\build_ffmpeg.py

      configure_flags['Chrome'].extend([  
          '--enable-decoder=aac,h264,mp3',  
          '--enable-demuxer=aac,mp3,mov',  
          '--enable-parser=aac,h264,mpegaudio',  
      ]) 

改为

     configure_flags['Chrome'].extend([  
          '--enable-decoder=aac,h264,mp3,mpeg4,amrnb,amrwb,flv',  
          '--enable-demuxer=aac,mp3,mov,avi,amr,flv',  
          '--enable-parser=aac,h264,mpegaudio,mpeg4video,h263',  
      ])  

分别打开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’

上面是通过查资料修改的,修改后编译能通过,没有报错,但是没有MP3、MP4支持。下面指令设置后再次编译便有了MP3、MP4支持,所以上面的这些有没有用不敢确定
下面的指令,很重要!!!
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome

2.windows 构建指令设置

//为保险再设置一次
set CEF_USE_GN=1
set GN_DEFINES=is_official_build=true	
//set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome 添加MP3、MP4支持 使用此条指令
set GYP_DEFINES=buildtype=Official    
//set GYP_DEFINES=proprietary_codecs=1 ffmpeg_branding=Chrome 此条指令可能是以前版本用来添加MP3、MP4支持
set GYP_MSVS_VERSION=2017
set CEF_ARCHIVE_FORMAT=tar.bz2

set GYP_GENERATORS=ninja,msvs-ninja
set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/*
//VS2017安装在默认目录,但任然需要下面设置,可能是由于VS2015和VS2017同时安装,路径根据自己的安装目录和版本确定
set WIN_CUSTOM_TOOLCHAIN=1
set CEF_VCVARS=none
set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
set SDK_ROOT=C:\Program Files (x86)\Windows Kits\10
set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\shared;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\atlmfc\include;%INCLUDE%
set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x86;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\HostX64\x86;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.13.26020\x64\Microsoft.VC141.CRT;%PATH%
set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\x86;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\ucrt\x86;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\lib\x86;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\atlmfc\lib\x86;%LIB%
set VS_CRT_ROOT=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\crt\src\vcruntim

此处参考资料
3.Bug修改
可以跳过,直接编译,等bug出现再查找相应解决方案。
编译过程中如果出现bug导致编译过程结束,一方面看cmd的输出,可能提供解决方案,还可以查看src\build-3239-release.log文件,搜索关键字FAILED来查找发生错误的文件
以下是我出现的问题:
错误

FAILED: obj/cef/chrome_elf_set/content_switches.obj
FAILED: obj/cef/chrome_elf_set/crash_keys.obj

解决方案
在cef/BUILD.gn文件中,查找 “chrome_elf_set”,在其子节点deps下添加"//media:media_features" 。
参考资料
4.编译代码
打开cmd切换到工作目录,然后输入命令来编译

python automate-git.py --download-dir=e:\cef\source --branch=3239 --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-3239-release.log,编译发生错误,可以打开这个日志文件并通过搜索关键字FAILED来查找发生错误的文件;
如果需要64位版本,则添加**–x64-build**参数且设置下列环境变量

set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.13.26020\x64\Microsoft.VC141.CRT;%PATH%
set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\um\x64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.15063.0\ucrt\x64;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\lib\x64;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\atlmfc\lib\x64;%LIB%
set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.15063.0\shared;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\atlmfc\include;%INCLUDE%

编译第一次大概有6、7个小时,第二次以后2、3个小时

六.编译完成

  • 输出目录为source\chromium\src\out\Release_GN_x86 和 source\chromium\src\cef\binary_distrib,Release_GN_x86下有cefclient.exe可以测试,binary_distrib下有cef_binary_3.3239.1723.g071d1c1_windows32.tar.bz2

  • http://html5test.com可以测试结果
    http://html5test.com

  • chrome://version查看版本

chrome://version

部分参考资料:
https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart
https://bitbucket.org/chromiumembedded/cef/wiki/AutomatedBuildSetup.md#markdown-header-windows-configuration
https://github.com/cefsharp/cef-binary/wiki/Building-Cef-from-source
http://blog.csdn.net/spark_fountain/article/details/73867813?locationNum=9&fps=1
http://www.cnblogs.com/hezhixiong/p/5935143.html
http://blog.csdn.net/zhuhongshu/article/details/54193842
https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md
http://blog.csdn.net/cromma/article/details/51141573
https://mfweb.top/820.html

欢迎关注我的公众号,持续分析优质技术文章
欢迎关注我的公众号

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值