欢迎光临
我们一直在努力

windows平台编译CEF支持H264(MP3、MP4)超详细

编译目标(如何确定目标定版本请查看: BranchesAndBuilding ) CEF Branch: 4664 CEF Commit:fe551e4Chromium Version: 96.0 . 4664.110 编译环境准备 1 安装或修改VS2019 VS版本和SDK版本可查看: BranchesAn

编译目标(如何确定目标定版本请查看:BranchesAndBuilding)

CEF Branch:4664
CEF Commit:fe551e4
Chromium Version:96.0.4664.110

编译环境准备 1 安装或修改VS2019 VS版本和SDK版本可查看:BranchesAndBuilding

1)在“在工作负荷”勾选“使用C 的桌面开发

2)在“单个组件”勾选“Windows 10 SDK (10.0.19014.0)”

3)安装或修改完成后在“控制面板”/“程序”/“卸载程序”中找到刚才对应的SDK,“右键”/“更改”

4)找到“Debgging Tools for Windows”,然后勾选

 2 网络代理工具和代理配置

1)一个稳定的代理, 比如: V2free

2)配置git 代理(v2rayN本地服务地址为http://127.0.0.1:10809)

::设置代理(执行一次即可)
git config --global http.proxy http://127.0.0.1:10809
git config --global https.proxy http://127.0.0.1:10809
::取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

CEF 源码编译流程 1 创建工作目录

md D:\Code\cef
md D:\Code\chromiumsrc
md D:Code\depot_tools

 2 添加环境变量

:: 代理
setx HTTP_PROXY "http://127.0.0.1:10809"
setx HTTPS_PROXY "http://127.0.0.1:10809"
netsh
winhttp
set proxy 127.0.0.1:8002

修改完毕后重新gclient会更新cipd client 成功,但是因为网络问题, 
chrome-infra-packages.appspot.com存在DNS污染问题,需要通过hosts文件修改.

142.250.196.148 chrome-infra-packages.appspot.com

随便找个地方生成一个文本文件,比如 D:\boto.cfg

在该文件中输入下面的内容(假设代理服务器是 http://http.proxy.com:1080):

[Boto]

proxy= http://http.proxy.com

proxy_port = 1080

然后设置环境变量

set NO_AUTH_BOTO_CONFIG=D:\boto.cfg


:: 禁止depot_tools自动更新
setx DEPOT_TOOLS_UPDATE "0"

:: 使用本地安装的 Visual Studio 版本
setx DEPOT_TOOLS_WIN_TOOLCHAIN "0"

:: GN 构建工具
setx CEF_USE_GN "1"

:: 使用 VS2019 创建项目
setx GN_ARGUMENTS "--ide=vs2019 --sln=cef --filters=//cef/*"

:: 使用官方构建并添加ffmpeg音视频解码
setx GN_DEFINES "is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome"

:: 将depot_tools路径("C:Codedepot_tools)添加到用户环境变量Path
for /f "tokens=3,*" %i in ('reg query HKCU\Environment /v Path') do setx Path "E:\Code\depot_tools;%i%j"

执行以上命令即可在系统中创建环境变量 (记得不用的时候把这些环境变量删除了)

 3 下载源码

1)下载cef

cd C:Code

:: clone源码并切换至4664分支
git clone https://bitbucket.org/chromiumembedded/cef.git -b 4664

2)下载chromium

cd C:Codechromium

:: clone指定tag(96.0.4664.110)的源码, (cef 4664分支 对应chromiun tag: 96.0.4664.110)
:: "--depth 1": 只下载当前版本不需要历史提交记录, 否则耗时严重且浪费储存空间或者意外中断
git clone https://chromium.googlesource.com/chromium/src.git -b 96.0.4664.110 --depth 1

3)下载depot_tools

cd C:Code

:: clone depot_tools工具
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

cd C:Codedepot_tools

启动更新过程,但是在国内一定会失败在有代理存在的情况下。原因是depot_tools 调用powershell不支持http_proxy这种方式设置代理.
解决方案如下:找到F:depot_tools.cipd_impl.ps1下的代码进行修改。找DownloadFile方法
 $wc = (New-Object System.Net.WebClient)
 $wc.Headers.Add("User-Agent", $UserAgent) 
$WebProxy = (New-Object System.Net.WebProxy("http://127.0.0.1:8002",$true))
 try {
 # Download failures were reported on Windows 8.1 without this line.
 [System.Net.ServicePointManager]::SecurityProtocol = ` 
[System.Net.SecurityProtocolType]::Tls12
 $wc.Proxy = $WebProxy
$wc.DownloadFile($Url, $Path)

 FDS 
:: 临时允许更新
set DEPOT_TOOLS_UPDATE=1
:: 执行update_depot_tools.bat下载内部工具
update_depot_tools.bat
:; 禁止更新
set DEPOT_TOOLS_UPDATE=0

:: checkout, (cef 4664分支 对应depot_tools commit id: e023d44820)
checkout e023d44820

注意: cef, chromium, depot_tools对应版本关系在”cefCHROMIUM_BUILD_COMPATIBILITY.txt”

 4 gclient 同步chromium依赖项目

1)创建.gclient文件

cd C:Codechromium

:: 通过命令创建.gclient文件
gclient config  https://chromium.googlesource.com/chromium/src.git --unmanaged

2)执行gclient sync

cd C:Codechromium

gclient sync --nohooks --no-history

此命令执行过程中可能会中途暂停或失败,耐心等待或重复执行此命令直到成功为止

3)执行gclient runhooks

cd C:Codechromium

:: 如果前面已经设置了此环境变量, 可以不用执行
set DEPOT_TOOLS_WIN_TOOLCHAIN=0

gclient runhooks

此命令执行过程中可能会中途暂停或失败,耐心等待或重复执行此命令直到成功为止

5 构建项目

1)复制 C:Codecef 到 C:Codechromiumsrc

xcopy "C:Codecef" "C:Codechromiumsrccef" /e

2)构建项目

cd C:Codechromiumsrccef

:: 如果前面已经设置了这些环境变量则可以跳过这3条命令
set CEF_USE_GN=1
set GN_ARGUMENTS=--ide=vs2019 --sln=cef --filters=//cef/*
set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome

:: 构建项目
call cef_create_projects.bat

6 编译

cd C:Codechromiumsrc

ninja -C out/Release_GN_x86 cef

7 打包

cd C:Codechromiumsrcceftools

make_distrib.bat --ninja-build --client

在 C:Codechromiumsrccefbinary_distrib 目录下就可以看到打包过的文件了

8 其他

1)如果在构建或编译过程中遇到python gbk编码错误, 找到报错的代码添加 utf-8 编码即可, 比如:

      if (environment_block_name != ''):
        env_block = _FormatAsEnvironmentBlock(env)
        with open(environment_block_name, 'w', encoding='utf-8') as f:
          f.write(env_block)
赞(0) 打赏
未经允许不得转载:junlai optics blog » windows平台编译CEF支持H264(MP3、MP4)超详细
分享到: 更多 (0)

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    good!!!

    maniac8个月前 (01-21)回复

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏