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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容