最近由于項目需要播放h264編碼的視頻潮罪,但是之前使用的Chromium Embedded Framework.framework是從官方下載的(官網(wǎng)下載地址:https://cef-builds.spotifycdn.com/index.html),官方版本默認(rèn)不支持h264。通過google讳侨,百度得知需要修改源碼中ffmpeg的配置。本來打算下載大家編譯好的直接使用,奈何網(wǎng)上全是windows版本,并且版本號相對偏舊(我原來使用的是87.1.11+g8bb7705+chromium-87.0.4280.66)妓美,只能自己下載源碼編譯,下面就記錄一下編譯歷程鲤孵,本次編譯的源碼是90.6.5+g7a604aa+chromium-90.0.4430.93版本壶栋。
編譯前準(zhǔn)備
電腦配置越高越好了,決定了編譯時間普监,磁盤空間最好是100G以上贵试,
安裝 git 與 python 工具;
穩(wěn)定的V*N凯正,用來下載 chromium 源碼毙玻,源碼大小在 45G 左右,穩(wěn)定性非常重要廊散;
根據(jù)官方文檔BranchesAndBuilding.md和版本號4430找到對應(yīng)的環(huán)境要求桑滩,macOS 10.15.4+,Xcode 12.2(個人建議最好是使用要求的版本允睹,否則可能會出現(xiàn)一些奇怪的問題运准。附上下載不同版本的地址: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.創(chuàng)建工具目錄
mkdir ~/Workspace/google_src/
mkdir ~/Workspace/google_src/automake(用來存放automate-git.py)
2.下載automate-git.py
下載automate-git.py到~/Workspace/google_src/automake
3.下載源碼
- 根據(jù)指定版本拉取源碼,不做編譯缭受,總代碼大約45G戳吝,網(wǎng)絡(luò)10m下載了1個半小時,git和curl需要設(shè)置http和https的代理贯涎。
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參數(shù)介紹
--branch 表示要下載哪個版本的代碼听哭,CEF 每個版本都有固定的分支,在 CEF 項目頁查看分支名稱指定即可塘雳。
--no-build 表示只下載代碼而不編譯陆盘,這里只為下載代碼,我們還要修改支持多媒體的參數(shù)败明,所以不進(jìn)行編譯隘马。
--no-distrib 不執(zhí)行打包項目,這里只為下載代碼妻顶,我們還要修改支持多媒體的參數(shù)酸员,所以不進(jìn)行打包。
--force-clean 如果你曾經(jīng)執(zhí)行過這個腳本讳嘱,可能會出錯幔嗦,則加上這個參數(shù),它執(zhí)行清理殘留文件(你也可以手動在 chromium 源碼目錄執(zhí)行 git clean -xdf 來清理目錄中的多余內(nèi)容)沥潭。
-
檢查下載的源碼是否版本號是否匹配--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 宏一定要打開汇恤,否則會在編譯時期報錯庞钢,找不到指定變量(我未驗證過,直接設(shè)置了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
-
設(shè)置GN_DEFINES(激活 ffmpeg 內(nèi)部解碼器基括,macos 注意必須加引號)
可以直接在終端里邊導(dǎo)入,也可以按照文檔修改文件 export GN_DEFINES="ffmpeg_branding=Chrome proprietary_codecs=true is_official_build=true"
ffmpeg_branding和proprietary_codecs 表示開啟多媒體編解碼支持财岔,但默認(rèn)僅支持一小部分阱穗,想要支持更多就是修改上面 ffmpeg 配置。
is_official_build 決定了是否是編譯正式版本使鹅,指定該參數(shù)為 true 基本上都是為了產(chǎn)品發(fā)布使用揪阶,同時也會在創(chuàng)建解決方案的時候生成帶有 sandbox 的解決方案(如 Release_GN_x64_sandbox),而不指定這個參數(shù)是沒有的患朱。
use_jumbo_build 官方資料默認(rèn)指定鲁僚,表示是否啟用試驗性的 jumbo 編譯,編譯過程會加快很多(至少快 1 小時)裁厅,但是占用 CPU 和內(nèi)存(尤其是內(nèi)存)會劇增冰沙。
is_component_build 官方資料默認(rèn)指定,但我們沒有開啟执虹,這個參數(shù)表示是否啟用組件化編譯拓挥,設(shè)置為 true 以后,base袋励、ffmpeg 等等都會被編譯為動態(tài)庫侥啤,使用時也是動態(tài)鏈接,編譯出來的 cef_sandbox 只有幾兆大小茬故,并且你需要復(fù)制很多 dll 文件到項目目錄下才能運行盖灸。
5.創(chuàng)建工程
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
編譯速度取決于電腦性能,盡量關(guān)閉其他耗性能程序磺芭,本人電腦MacBook Pro (16-inch, 2019)赁炎,處理器2.6 GHz 六核Intel Core i7, 內(nèi)存16 GB 2667 MHz DDR4钾腺,編譯花費了5個小時徙垫,大概編譯了50000萬個文件。我很順利一次通過放棒,但是參考資料說是增量編譯姻报,不用擔(dān)心修改后重頭來。
7.驗證編解碼是否激活
cd ~/Workspace/google_src/chromium/src
open out/Debug_GN_x64/cefclient.app
在打開的cefclient中輸入http://html5test.com測試哨查,結(jié)果如下圖:
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的打包鳄梅,會出錯
打包結(jié)果如下(這里包含了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
編譯結(jié)果
下載鏈接地址:
鏈接: 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