CEF3支持H264【macOS】

最近由于项目需要播放h264编码的视频,但是之前使用的Chromium Embedded Framework.framework是从官方下载的(官网下载地址:https://cef-builds.spotifycdn.com/index.html),官方版本默认不支持h264。通过google,百度得知需要修改源码中ffmpeg的配置。本来打算下载大家编译好的直接使用,奈何网上全是windows版本,并且版本号相对偏旧(我原来使用的是87.1.11+g8bb7705+chromium-87.0.4280.66),只能自己下载源码编译,下面就记录一下编译历程,本次编译的源码是90.6.5+g7a604aa+chromium-90.0.4430.93版本。

编译前准备

  • 电脑配置越高越好了,决定了编译时间,磁盘空间最好是100G以上,

  • 安装 git 与 python 工具;

  • 稳定的V*N,用来下载 chromium 源码,源码大小在 45G 左右,稳定性非常重要;

  • 根据官方文档BranchesAndBuilding.md和版本号4430找到对应的环境要求,macOS 10.15.4+,Xcode 12.2(个人建议最好是使用要求的版本,否则可能会出现一些奇怪的问题。附上下载不同版本的地址:https://developer.apple.com/download/more/)

  • 代理配置
    注意地址换成自己的代理地址
    git代理配置
    git config --global http.proxy http://10.33.43.240:10809
    git config --global https.proxy http://10.33.43.240:10809
    使用git config --global -l查看代理配置情况

    本地代理配置(主要是保证curl)
    export http_proxy=http://10.33.43.240:10809
    export https_proxy=http://10.33.43.240:10809

编译步骤

1.创建工具目录

mkdir ~/Workspace/google_src/
mkdir ~/Workspace/google_src/automake(用来存放automate-git.py)

2.下载automate-git.py

下载automate-git.py到~/Workspace/google_src/automake

3.下载源码

  • 根据指定版本拉取源码,不做编译,总代码大约45G,网络10m下载了1个半小时,gitcurl需要设置httphttps的代理。
python3 /Users/hitry/Workspace/google_src/automate/automate-git.py --download-dir=/Users/hitry/Workspace/google_src --branch=4430 --no-distrib --no-build --force-clean --x64-build
  • automate-git.py参数介绍

--branch 表示要下载哪个版本的代码,CEF 每个版本都有固定的分支,在 CEF 项目页查看分支名称指定即可。

--no-build 表示只下载代码而不编译,这里只为下载代码,我们还要修改支持多媒体的参数,所以不进行编译。

--no-distrib 不执行打包项目,这里只为下载代码,我们还要修改支持多媒体的参数,所以不进行打包。

--force-clean 如果你曾经执行过这个脚本,可能会出错,则加上这个参数,它执行清理残留文件(你也可以手动在 chromium 源码目录执行 git clean -xdf 来清理目录中的多余内容)。

  • 检查下载的源码是否版本号是否匹配--branch=4430

    cd ~/Workspace/google_src/chromium 
    git status
    

4.修改ffmpeg的配置

  • 修改~/Workspace/google_src/chromium/src/third_party/ffmpeg/chromium/config/Chrome/mac/x64/config.h文件中的下面的宏为1,以支持mp4,h264, flv等。参考资料中提到#define CONFIG_SIPR_PARSER 1 宏一定要打开,否则会在编译时期报错,找不到指定变量(我未验证过,直接设置了1)。
#define CONFIG_FLV_DECODER 1
#define CONFIG_H263_DECODER 1
#define CONFIG_H263I_DECODER 1
#define CONFIG_MPEG4_DECODER 1
#define CONFIG_MPEGVIDEO_DECODER 1
#define CONFIG_MSMPEG4V1_DECODER 1
#define CONFIG_MSMPEG4V2_DECODER 1
#define CONFIG_MSMPEG4V3_DECODER 1
#define CONFIG_RV10_DECODER 1
#define CONFIG_RV20_DECODER 1
#define CONFIG_RV30_DECODER 1
#define CONFIG_RV40_DECODER 1
#define CONFIG_AC3_DECODER 1
#define CONFIG_AMRNB_DECODER 1
#define CONFIG_AMRWB_DECODER 1
#define CONFIG_COOK_DECODER 1
#define CONFIG_SIPR_DECODER 1
#define CONFIG_FLV_ENCODER 1
#define CONFIG_H263_ENCODER 1
#define CONFIG_MPEG4_ENCODER 1
#define CONFIG_MSMPEG4V2_ENCODER 1
#define CONFIG_MSMPEG4V3_ENCODER 1
#define CONFIG_RV10_ENCODER 1
#define CONFIG_RV20_ENCODER 1
#define CONFIG_AAC_ENCODER 1
#define CONFIG_AC3_ENCODER 1
#define CONFIG_AC3_PARSER 1
#define CONFIG_COOK_PARSER 1
#define CONFIG_H263_PARSER 1
#define CONFIG_MPEG4VIDEO_PARSER 1
#define CONFIG_MPEGVIDEO_PARSER 1
#define CONFIG_RV30_PARSER 1
#define CONFIG_RV40_PARSER 1
#define CONFIG_SIPR_PARSER 1
#define CONFIG_AC3_DEMUXER 1
#define CONFIG_AMR_DEMUXER 1
#define CONFIG_AMRNB_DEMUXER 1
#define CONFIG_AMRWB_DEMUXER 1
#define CONFIG_AVI_DEMUXER 1
#define CONFIG_AVISYNTH_DEMUXER 1
#define CONFIG_FLV_DEMUXER 1
#define CONFIG_H263_DEMUXER 1
#define CONFIG_H264_DEMUXER 1
#define CONFIG_MPEGTS_DEMUXER 1
#define CONFIG_MPEGTSRAW_DEMUXER 1
#define CONFIG_MPEGVIDEO_DEMUXER 1
#define CONFIG_RM_DEMUXER 1
#define CONFIG_AC3_MUXER 1
#define CONFIG_AMR_MUXER 1
#define CONFIG_AVI_MUXER 1
#define CONFIG_FLV_MUXER 1
#define CONFIG_H263_MUXER 1
#define CONFIG_H264_MUXER 1
#define CONFIG_MPEGTS_MUXER 1
#define CONFIG_RM_MUXER 1
  • 设置GN_DEFINES(激活 ffmpeg 内部解码器,macos 注意必须加引号)

    可以直接在终端里边导入,也可以按照文档修改文件
    export GN_DEFINES="ffmpeg_branding=Chrome proprietary_codecs=true is_official_build=true"
    

    ffmpeg_brandingproprietary_codecs 表示开启多媒体编解码支持,但默认仅支持一小部分,想要支持更多就是修改上面 ffmpeg 配置。

    is_official_build 决定了是否是编译正式版本,指定该参数为 true 基本上都是为了产品发布使用,同时也会在创建解决方案的时候生成带有 sandbox 的解决方案(如 Release_GN_x64_sandbox),而不指定这个参数是没有的。

    use_jumbo_build 官方资料默认指定,表示是否启用试验性的 jumbo 编译,编译过程会加快很多(至少快 1 小时),但是占用 CPU 和内存(尤其是内存)会剧增。

    is_component_build 官方资料默认指定,但我们没有开启,这个参数表示是否启用组件化编译,设置为 true 以后,baseffmpeg 等等都会被编译为动态库,使用时也是动态链接,编译出来的 cef_sandbox 只有几兆大小,并且你需要复制很多 dll 文件到项目目录下才能运行。

5.创建工程

cd ~/Workspace/google_src/chromium/src/cef
./cef_create_projects.sh 

可以在 ~/Workspace/google_src/chromium/src/out 目录下看到这些工程目录:

hitry@hitry-25761deMacBook-Pro out % ls -l
total 8
drwxr-xr-x  313 hitry  staff  10016  5 12 02:07 Debug_GN_x64
drwxr-xr-x  211 hitry  staff   6752  5 12 09:23 Debug_GN_x64_sandbox
drwxr-xr-x  313 hitry  staff  10016  5 11 20:54 Release_GN_x64
drwxr-xr-x  211 hitry  staff   6752  5 11 20:57 Release_GN_x64_sandbox
-rw-r--r--    1 hitry  staff     24  5 11 14:03 cef.branch

6.编译cef

cd ~/Workspace/google_src/chromium/src
ninja -C out/Release_GN_x64 cef

编译速度取决于电脑性能,尽量关闭其他耗性能程序,本人电脑MacBook Pro (16-inch, 2019),处理器2.6 GHz 六核Intel Core i7, 内存16 GB 2667 MHz DDR4,编译花费了5个小时,大概编译了50000万个文件。我很顺利一次通过,但是参考资料说是增量编译,不用担心修改后重头来。

7.验证编解码是否激活

cd ~/Workspace/google_src/chromium/src
open out/Debug_GN_x64/cefclient.app

在打开的cefclient中输入http://html5test.com测试,结果如下图:

截屏2021-05-12 下午4.00.47.png

8.编译sandbox

cd ~/Workspace/google_src/chromium/src
ninja -C out/Release_GN_x64_sandbox cef_sandbox

这个编译速度很快,大概编译290多个文件。

9.打包工程

cd ~/Workspace/google_src/chromium/src/cef/tools
./make_distrib.sh --ninja-build --x64-build --minimal

--minimal,表示打包Release 版本,不包含 Debug。如果需要debug也包含的话,去掉即可,且需要编译debug版本的cef和sandbox。

--x64-build,表示打包64,一定要添加,否则会按照32的打包,会出错

打包结果如下(这里包含了debug)

hitry@hitry-25761deMacBook-Pro binary_distrib % ls -l
total 8978992
drwxr-xr-x  15 hitry  staff         480  5 12 09:41 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64
-rw-r--r--   1 hitry  staff   228530743  5 12 09:25 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64.zip
drwxr-xr-x   3 hitry  staff          96  5 12 09:25 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64_debug_symbols
-rw-r--r--   1 hitry  staff  1518713565  5 12 09:28 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64_debug_symbols.zip
drwxr-xr-x   9 hitry  staff         288  5 11 21:40 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64_minimal
-rw-r--r--   1 hitry  staff   100726351  5 11 21:40 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64_minimal.zip
drwxr-xr-x   3 hitry  staff          96  5 11 21:40 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64_minimal_release_symbols
-rw-r--r--   1 hitry  staff  1368036763  5 11 21:42 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64_minimal_release_symbols.zip
drwxr-xr-x   3 hitry  staff          96  5 12 09:25 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64_release_symbols
-rw-r--r--   1 hitry  staff  1368036731  5 12 09:29 cef_binary_90.6.5+g7a604aa+chromium-90.0.4430.93_macosx64_release_symbols.zip

编译结果

下载链接地址:

链接: https://pan.baidu.com/s/1onH-6vE7bF48SJBGAgx2gA 提取码: wknc

参考文档:

https://bitbucket.org/chromiumembedded/cef/wiki/MasterBuildQuickStart.md

https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md

https://bitbucket.org/chromiumembedded/cef/wiki/AutomatedBuildSetup.md

https://zhuanlan.zhihu.com/p/133264864

https://blog.csdn.net/pnhuangyu/article/details/103191466/

你可能感兴趣的:(CEF3支持H264【macOS】)