CEF3支持H264【macOS】

最近由于項目需要播放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個半小時,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 表示要下載哪個版本的代碼听哭,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_brandingproprietary_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é)果如下圖:

截屏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的打包鳄梅,會出錯

打包結(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)系作者
  • 序言:七十年代末叠国,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子戴尸,更是在濱河造成了極大的恐慌粟焊,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孙蒙,死亡現(xiàn)場離奇詭異项棠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)挎峦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門香追,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人坦胶,你說我怎么就攤上這事透典。” “怎么了顿苇?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵掷匠,是天一觀的道長。 經(jīng)常有香客問我岖圈,道長讹语,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任蜂科,我火速辦了婚禮顽决,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘导匣。我一直安慰自己才菠,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布贡定。 她就那樣靜靜地躺著赋访,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚓耽,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天渠牲,我揣著相機(jī)與錄音,去河邊找鬼步悠。 笑死签杈,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鼎兽。 我是一名探鬼主播答姥,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谚咬!你這毒婦竟也來了鹦付?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤择卦,失蹤者是張志新(化名)和其女友劉穎敲长,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體互捌,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡潘明,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了秕噪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钳降。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腌巾,靈堂內(nèi)的尸體忽然破棺而出遂填,到底是詐尸還是另有隱情,我是刑警寧澤澈蝙,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布吓坚,位于F島的核電站,受9級特大地震影響灯荧,放射性物質(zhì)發(fā)生泄漏礁击。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一逗载、第九天 我趴在偏房一處隱蔽的房頂上張望哆窿。 院中可真熱鬧,春花似錦厉斟、人聲如沸挚躯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽码荔。三九已至漩勤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缩搅,已是汗流浹背越败。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留誉己,地道東北人眉尸。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓域蜗,卻偏偏與公主長得像巨双,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子霉祸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容