记录一次项目中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所在目录 执行脚本

以上过程遇到的问题:

  1. 梯子不稳定导致git clone一半失败了
    解决:找个稳定的梯子
  2. chromium源码clone地址访问连接不稳定,导致失败后又得重新下载
    解决:py脚本启动参数中 增加:--chromium-url=https://github.com/chromium/chromium.git 指定从github上下载chromium镜像
  3. 网页可以访问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 是为了不再检查更新,缩短命令执行时间。
开始执行后,程序运行

遇到问题

  1. 提示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
  2. 提示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


功能前后对比:

posted @ 2023-01-03 20:16  river12  阅读(1445)  评论(0编辑  收藏  举报