记录一次项目中CEF版本的升级(二):CEF编译
默认的发布版本是不支持mp4,mp3等音视频格式的,官方解释是说由于版权和各个国家法律问题。这就给我们造成了麻烦。必须得自己下载代码,修改,然后编译,才能支持音视频。
官方构建文档:
chromiumembedded / cef / wiki / MasterBuildQuickStart — Bitbucket
chromiumembedded / cef / wiki / AutomatedBuildSetup — Bitbucket
分别为手动编译和脚本自动编译
我是选择的脚本自动编译
环境搭建:
0.基础环境要求,准备编译分支5304
1.准备个稳定的梯子,流量最好要100G以上
梯子需要开启http 全局代理,并知道代理端口
代码端口查看举例:
v2RayN:双击右下角小图标
2.构建好目录和更新automate-git.py 脚本和工具集(都在上方官方文档中可以下载)
在本地ssd盘中构建一个如下目录
~/code/
automate/
automate-git.py <-- CEF build script
chromium_git/
cef/ <-- CEF source checkout
chromium/
src/ <-- Chromium source checkout
update.[bat|sh] <-- Bootstrap script for automate-git.py
depot_tools/ <-- Chromium build tools
3.把depot_tools目录添加到系统环境变量中,并置顶(至少放在python前面)
4.下载安装git 和 python(如果已经有了,并且版本符合,就可以跳过)
打开cmd窗口,切换到depot_tools目录,执行更新脚本
cd c:\code\depot_tools
update_depot_tools.bat
就可以自动安装
5.增加update.bat
内容如下:
::set proxys for depot_tools
set HTTP_PROXY=http://127.0.0.1:21882
set HTTPS_PROXY=http://127.0.0.1:21882
set NO_AUTH_BOTO_CONFIG=D:\cef_src\.boto
::download
set CEF_USE_GN=1
set GN_DEFINES=is_official_build=true ffmpeg_branding=Chrome proprietary_codecs=true
set GN_ARGUMENTS=--ide=vs2019 --sln=cef --filters=//cef/*
set GYP_DEFINES=buildtype=Official
set GYP_MSVS_VERSION=2019
set CEF_ARCHIVE_FORMAT=tar.bz2
python D:\cef_src\automate-git.py --download-dir=D:\cef_src --branch=5304 --no-cef-update --no-build --no-distrib --no-depot-tools-update --force-config --chromium-url=https://github.com/chromium/chromium.git
pause
内容说明:
其中前两项为http代理设置
boto是环境构建需要文件,位置任意,内容如下:(端口为代理端口)
[Boto]
proxy= 127.0.0.1
proxy_port = 21882
后面的几项set为构建工程使用
最后的python脚本最关键,建议阅读一遍脚本代码,对其中的参数也就能更了解
参数说明:
python D:\cef_src\automate-git.py --help
6. .gitconfig设置
我是图方便,直接在这里配置的全局参数,也可以通过脚本设置单个git参数
其中增加如下设置:
(注意如果有用户名等要删除)
[http]
postBuffer = 524288000
version = HTTP/2
lowSpeedLimit = 0
lowSpeedTime = 999999
proxy = http://127.0.0.1:21882
[https]
postBuffer = 524288000
lowSpeedLimit = 0
lowSpeedTime = 999999
proxy = https://127.0.0.1:21882
7.开始执行update.bat 脚本下载chromium代码和相关依赖
cmd切换到update.bat所在目录 执行脚本
以上过程遇到的问题:
- 梯子不稳定导致git clone一半失败了
解决:找个稳定的梯子 - chromium源码clone地址访问连接不稳定,导致失败后又得重新下载
解决:py脚本启动参数中 增加:--chromium-url=https://github.com/chromium/chromium.git 指定从github上下载chromium镜像 - 网页可以访问chromium网址,cmd窗口怎么都不行
解决:.gitconfig中把一些无用的节点删除
以下是修改和编译过程:
8.修改代码支持音视频
修改source\chromium\src\third_party\ffmpeg\chromium\scripts\build_ffmpeg.py
修改代码:
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',
])
修改chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h
如果要编译64位版本还要修改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'
9.开始编译
执行命令,修改之前的脚本参数,执行update.bat
python ..\automate\automate-git.py --download-dir=G:\cef_src\chromium_git --depot-tools-dir=G:\cef_src\depot_tools --branch=5304 --client-distrib --with-pgo-profiles --no-cef-update --no-chromium-update --no-depot-tools-update --force-build --chromium-url=https://gitcode.net/mirrors/chromium/chromium.git
默认编译32位程序,debug和release都编译,如果想要编译64位或者只编译debug或release,需要传递参数控制。
--no-cef-update --no-chromium-update --no-depot-tools-update 是为了不再检查更新,缩短命令执行时间。
开始执行后,程序运行
遇到问题
- 提示You must install Windows 10 SDK version 10.0.20348.0 including "Debugging Tools for Windows" feature.
解决:https://www.cnblogs.com/bigben0123/p/14684257.html 安装对应的Debugging Tools for Windows - 提示RuntimeError: requested profile "
D:\chromium\src\src\chrome\build\pgo_profiles\c hrome-win32-master-1597611060-adf0ab6d7715dfdb592c8864718732c417ac4f3f.profdata" doesn't exist, please make sure "checkout_pgo_profiles" is set to True in the " custom_vars" section of your .gclient file, e.g.: solutions = [ { "name": "src","custom_vars": { "checkout_pgo_profiles": True, }, }, ], and then run "gclient runhooks" to download it. You can also simply disable the PGO optimizations by setting|chrome_pgo_phase = 0| in your GN arguments.
解决:https://www.programminghunter.com/article/60482208289/ 我这里直接简单禁用了PGO优化
10.编译结束
编译4 、5个小时就完成了
11.展示成果
输出的发布文件:
用输出的client.exe 播放mp4
功能前后对比:
本文来自博客园,作者:river12,转载请注明原文链接:https://www.cnblogs.com/river12/p/17023144.html