CEF3支持H264【macOS】

最近由于項(xiàng)目需要播放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)備

  • 電腦配置越高越好了,決定了編譯時(shí)間,磁盤空間最好是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(個(gè)人建議最好是使用要求的版本,否則可能會出現(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個(gè)半小時(shí),gitcurl需要設(shè)置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參數(shù)介紹

--branch 表示要下載哪個(gè)版本的代碼,CEF 每個(gè)版本都有固定的分支,在 CEF 項(xiàng)目頁查看分支名稱指定即可。

--no-build 表示只下載代碼而不編譯,這里只為下載代碼,我們還要修改支持多媒體的參數(shù),所以不進(jìn)行編譯。

--no-distrib 不執(zhí)行打包項(xiàng)目,這里只為下載代碼,我們還要修改支持多媒體的參數(shù),所以不進(jìn)行打包。

--force-clean 如果你曾經(jīng)執(zhí)行過這個(gè)腳本,可能會出錯,則加上這個(gè)參數(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í)期報(bào)錯,找不到指定變量(我未驗(yàn)證過,直接設(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_brandingproprietary_codecs 表示開啟多媒體編解碼支持,但默認(rèn)僅支持一小部分,想要支持更多就是修改上面 ffmpeg 配置。

    is_official_build 決定了是否是編譯正式版本,指定該參數(shù)為 true 基本上都是為了產(chǎn)品發(fā)布使用,同時(shí)也會在創(chuàng)建解決方案的時(shí)候生成帶有 sandbox 的解決方案(如 Release_GN_x64_sandbox),而不指定這個(gè)參數(shù)是沒有的。

    use_jumbo_build 官方資料默認(rèn)指定,表示是否啟用試驗(yàn)性的 jumbo 編譯,編譯過程會加快很多(至少快 1 小時(shí)),但是占用 CPU 和內(nèi)存(尤其是內(nèi)存)會劇增。

    is_component_build 官方資料默認(rèn)指定,但我們沒有開啟,這個(gè)參數(shù)表示是否啟用組件化編譯,設(shè)置為 true 以后,baseffmpeg 等等都會被編譯為動態(tài)庫,使用時(shí)也是動態(tài)鏈接,編譯出來的 cef_sandbox 只有幾兆大小,并且你需要復(fù)制很多 dll 文件到項(xiàng)目目錄下才能運(yùn)行。

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,編譯花費(fèi)了5個(gè)小時(shí),大概編譯了50000萬個(gè)文件。我很順利一次通過,但是參考資料說是增量編譯,不用擔(dān)心修改后重頭來。

7.驗(yàn)證編解碼是否激活

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

在打開的cefclient中輸入http://html5test.com測試,結(jié)果如下圖:

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

8.編譯sandbox

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

這個(gè)編譯速度很快,大概編譯290多個(gè)文件。

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容