赞
踩
(1)打开Windows 设置,选择时间和语言
(2)选择区域选项,将国家或地区设置成美国
(3)选择语言选项,点击添加语言,选择英语(美国),下一步勾选设置为我的Windows显示语言
(4)完成语言包的切换后会要求注销账户,根据提示注销
(5)重新登录账户
(6)回到刚才的语言选项,点击管理语言设置
(7)点击更改系统区域设置,选择英语(美国),勾选 Bate 版:使用 Unicode UTF-8 提供全球语言支持 选项
(8)点击确定,按照提示重启系统,重启完成后会将语言设置成英文
CEF_Build
文件夹,之后所有的文件都放到里面1、下载工具depot_tools.zip,然后解压到D:\CEF_Build\depot_tools
路径
2、将D:\CEF_Build\depot_tools
添加到环境变量
3、在depot_tools目录下使用cmd执行update_depot_tools.bat
,将会自动安装需要的软件
4、将 automate-git.py 脚本下载到D:\CEF_Build\automate\automate-git.py
在automate
目录下创建脚本文件update.bat
,写入以下内容:
@echo off
set GN_DEFINES=is_component_build=true
set GN_ARGUMENTS=--ide=vs2019 --sln=cef --filters=//cef/*
python automate-git.py --download-dir=D:\CEF_Build\chromium_git --depot-tools-dir=D:\CEF_Build\depot_tools --branch=4430 --no-update --no-depot-tools-update --no-distrib --no-build --force-clean
pause
双击运行update.bat
以下载源码
参数说明:
download-dir: 代码下载目录
depot-tools-dir: 工具目录
branch: 要编译的分支,可以参考Current Release Branches (Supported) — Bitbucket
–no-update:不更新Chromium或CEF
–no-depot-tools-update:不更新depot-tools
–no-distrib:不打包
–no-build:不编译
–force-clean:强制清理Chromium和CEF,这将触发一个新的更新、构建和发布
注:更多参数可以使用命令
python automate-git.py --help
查看
源码修改是在90.6.7.4430
版本上进行的
1、修改D:\CEF_Build\chromium_git\chromium\src\third_party\ffmpeg\chromium\scripts\build_ffmpeg.py
找到configure_flags['Chrome'].extend
,修改为如下
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',
])
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’,
])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’,
])
2、修改D:\CEF_Build\chromium_git\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\x64\config.h
找到宏**#define CONFIG_SIPR_PARSER**设置成1
1、修改chromium_git\chromium\src\third_party\ffmpeg\ffmpeg_generated.gni
if ((is_mac) || (is_win) || (use_linux_config)) { ffmpeg_c_sources += [ "libavcodec/autorename_libavcodec_hpeldsp.c", "libavcodec/autorename_libavcodec_videodsp.c", "libavcodec/autorename_libavcodec_vp3dsp.c", "libavcodec/autorename_libavcodec_vp8dsp.c", "libavcodec/h264pred.c", "libavcodec/vp3.c", "libavcodec/vp3_parser.c", "libavcodec/vp56rac.c", "libavcodec/vp8.c", "libavcodec/vp8_parser.c", ] ffmpeg_c_sources += [ "libavcodec/bswapdsp.c", "libavformat/avc.c", "libavcodec/dynamic_hdr10_plus.c", "libavcodec/autorename_libavcodec_hevcdec.c", "libavcodec/hevc_cabac.c", "libavcodec/hevc_data.c", "libavcodec/hevc_filter.c", "libavcodec/hevc_mvs.c", "libavcodec/hevc_parse.c", "libavcodec/hevc_parser.c", "libavcodec/hevc_ps.c", "libavcodec/hevc_refs.c", "libavcodec/hevc_sei.c", "libavcodec/hevcdsp.c", "libavcodec/hevcpred.c", "libavcodec/x86/bswapdsp_init.c", "libavcodec/x86/hevcdsp_init.c", "libavformat/autorename_libavformat_hevc.c", "libavformat/hevcdec.c", ] ffmpeg_asm_sources += [ "libavcodec/x86/bswapdsp.asm", "libavcodec/x86/hevc_deblock.asm", "libavcodec/x86/hevc_idct.asm", "libavcodec/x86/hevc_mc.asm", "libavcodec/x86/hevc_add_res.asm", "libavcodec/x86/hevc_sao.asm", "libavcodec/x86/hevc_sao_10bit.asm", ] }
2、修改chromium_git\chromium\src\third_party\ffmpeg\ffmpeg_options.gni
# if (is_chrome_branded) { # _default_ffmpeg_branding = "Chrome" # } else { # _default_ffmpeg_branding = "Chromium" # } # if (is_chromeos && is_chrome_branded) { # _default_ffmpeg_branding = "ChromeOS" # } # if (is_chromecast) { # if (is_android) { # _default_ffmpeg_branding = "Chrome" # } else { # # TODO(alokp): What audio codecs does Chromecast want here? Sort # # out and add configs if necessary. http://crbug.com/570754 # _default_ffmpeg_branding = "ChromeOS" # } # } + _default_ffmpeg_branding = "Chrome"
[外链图片转存中…(img-559m7loM-1653713307624)]
3、复制并重命名这个文件里的两个文件 chromium_git\chromium\src\third_party\ffmpeg\
4、修改这两个文件,把下面几个的值配成 1:
define CONFIG_HEVC_DECODER 1
define CONFIG_HEVC_DEMUXER 1
define CONFIG_HEVC_PARSER 1
// 增加下下面的宏
define CONFIG_MP4_DEMUXER 1
5、修改:src\third_party\ffmpeg\chromium\config\Chrome\win\x64\libavcodec\codec_list.c
添加以下内容
&ff_hevc_decoder
6、修改:src\third_party\ffmpeg\chromium\config\Chrome\win\x64\libavcodec\parser_list.c
添加以下内容
&ff_hevc_parser
7、修改:src\third_party\ffmpeg\chromium\config\Chrome\win\x64\libavformat\demuxer_list.c
添加以下内容
&ff_hevc_demuxer
8、修改:chromium_git\chromium\src\build\config\features.gni
# Note: this flag is used by WebRTC which is DEPSed into Chrome. Moving it
# out of //build will require using the build_overrides directory.
# proprietary_codecs = is_chrome_branded || is_chromecast
+ proprietary_codecs = true
[外链图片转存中…(img-4puuamAQ-1653713307625)]
9、修改: chromium_git\chromium\src\media\media_options.gni
# Enable HEVC/H265 demuxing. Actual decoding must be provided by the
# platform. Enabled by default for Chromecast, Chrome OS protected media and
# fuzzer builds.
# enable_platform_hevc =
# proprietary_codecs &&
# (is_chromecast || use_chromeos_protected_media || use_fuzzing_engine)
+ enable_platform_hevc = true
[外链图片转存中…(img-vgmQ3zY0-1653713307625)]
10、修改:chromium_git\chromium\src\media\BUILD.gn
,注释掉里面一个判断
if (proprietary_codecs && media_use_ffmpeg) {
# assert(
# ffmpeg_branding != "Chromium",
# "proprietary codecs and ffmpeg_branding set to Chromium are incompatible")
}
[外链图片转存中…(img-fm2Kx338-1653713307625)]
11、修改:chromium_git\chromium\src\media\base\supported_types.cc
bool IsDefaultSupportedVideoType(const VideoType& type) { //... switch (type.codec) { // .... case kCodecVP9: // Color management required for HDR to not look terrible. return IsColorSpaceSupported(type.color_space) && IsVp9ProfileSupported(type.profile); case kCodecH264: + case kCodecHEVC: case kCodecVP8: case kCodecTheora: return true; // case kCodecHEVC: // #if BUILDFLAG(ENABLE_PLATFORM_HEVC) && BUILDFLAG(USE_CHROMEOS_PROTECTED_MEDIA) // return IsColorSpaceSupported(type.color_space) && // IsHevcProfileSupported(type.profile); // #else // return false; // #endif case kUnknownVideoCodec: case kCodecVC1: case kCodecMPEG2: case kCodecDolbyVision: return false; // ... } }
[外链图片转存中…(img-EkAoAUnR-1653713307626)]
注意:
编译了支持HEVC解码的版本后,使用html5test.com测试还是提示不支持H.265,原因如下:
html5test.com 上检测浏览器是否支持HEVC是用 video.canPlayType() 检查以下两种codec是否支持而确定浏览器是否支持H.265的:
video/mp4; codecs=“hvc1.1.L0.0”
video/mp4; codecs=“hev1.1.L0.0”但是在Chromium源码
media\base\video_codes.cc
中(90.6.7.4430版本):// The specification for HEVC codec id strings can be found in ISO IEC 14496-15
// dated 2012 or newer in the Annex E.3
bool ParseHEVCCodecId(…) { … }给出的codec是:
video/mp4; codecs=“hev1.1.2.L93.B0”
video/mp4; codecs="hev1.A4.41.H120.B0.23
这两个值是不符合 ISO IEC 14496-15 规范的(参考Annex E.3),因此会显示不支持。实际上是可以播放HEVC文件的。
这两个codec在macOS Safari 13.0.4上是有效的,可以被识别的。
在automate
目录下创建脚本文件create.bat
,写入以下内容:
@echo off
set GN_DEFINES=proprietary_codecs=true ffmpeg_branding=Chrome is_official_build=true is_debug=false target_cpu=x64 symbol_level=0 enable_nacl=false use_jumbo_build=true
set GN_ARGUMENTS=--ide=vs2019 --sln=cef --filters=//cef/*
cd ..\chromium_git\chromium\src\cef
call cef_create_projects.bat
pause
双击运行create.bat
将生成工程,生成的路径在D:\CEF_Build\chromium_git\chromium\src\out
GN_DEFINES 参数介绍:
ffmpeg_branding和proprietary_codecs 表示开启多媒体编解码支持,但默认仅支持一小部分,想要支持更多就是修改 ffmpeg 配置。
is_official_build 决定了是否是编译正式版本,指定该参数为 true 基本上都是为了产品发布使用,同时也会在创建解决方案的时候生成带有 sandbox 的解决方案(如 Release_GN_x64_sandbox),而不指定这个参数是没有的。
use_jumbo_build 官方资料默认指定,表示是否启用试验性的 jumbo 编译,编译过程会加快很多(至少快 1 小时),但是占用 CPU 和内存(尤其是内存)会剧增。
is_component_build 官方资料默认指定,但我们没有开启,这个参数表示是否启用组件化编译,设置为 true 以后,base、ffmpeg 等等都会被编译为动态库,使用时也是动态链接,编译出来的 cef_sandbox 只有几兆大小,并且你需要复制很多 dll 文件到项目目录下才能运行。
enable_nacl 禁用本机客户端 大多数开发人员通常不需要测试本机客户端功能,可以通过禁用它来加快构建速度。
symbol_level 设置从 0(无符号或最小符号)到 2(完整符号)不等。较低的级别使调试几乎不可能,但构建速度会快得多。在某些情况下,如果您只想尽快进行构建(许多构建机器人都这样做),它可能很有用
注:详情可以查询官方介绍GN 构建配置 (chromium.org)
在automate
目录下创建脚本文件build.bat
,写入以下内容:
@echo off
cd ..\chromium_git\chromium\src
echo StartTime %date% %time:~0,2%:%time:~3,2%:%time:~6,2%
ninja -C out\Release_GN_x64 cef
IF ERRORLEVEL 1 goto END
ninja -C out\Release_GN_x64_sandbox cef_sandbox
:END
echo EndTime %date% %time:~0,2%:%time:~3,2%:%time:~6,2%
pause
双击运行build.bat
将进行编译
注意:如果系统里已经安装了python3,需要卸载掉,否则会冲突报错!
在automate
目录下创建脚本文件distrib.bat
,写入以下内容:
@echo off
cd ..\chromium_git\chromium\src\cef\tools
call make_distrib.bat --ninja-build --minimal --x64-build
pause
双击运行distrib.bat
将进行打包,打包完成后可以在chromium_git\chromium\src\cef\binary_distrib
下找到打包的文件
编译成功后将 libcef.dll 复制出来替换掉就可以,可以使用以下网址判断是否支持 H.264 和 H.265 :
https://mgh.cool:9000/hevctest/index.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。