天天看點

windows下編譯cef最新版本并支援mp3/mp4

預讀

  • 不懂就請參考官方位址
  • 一般要2步,下載下傳 和 編譯
  • 建立檔案結構
~/code/
  automate/           <-- 全部腳本放到這裡
    automate-git.py   <-- CEF build script
  chromium_git/
    cef/              <-- CEF source checkout
    chromium/
      src/            <-- Chromium source checkout
    update.[bat|sh]   <-- Bootstrap script for automate-git.py
  depot_tools/        <-- Chromium build tools
           
  • 安裝ninja,并加添到系統環境變量Clicked Me
  • 最好不要在nvme盤上clone,可能導緻clone卡死

詳說

下載下傳

  1. 推薦使用pigcha加速器,點我下載下傳,然後注冊登入加速後,勾上git代理再打開控制台代理
    windows下編譯cef最新版本并支援mp3/mp4
    後面的全部指令行都在這個“控制台代理” 裡面運作
  2. 在automate下建立update.bat,内容為如下,執行該腳本,支援mp3 mp4~下載下傳很快,代碼可能就20來G樣子,我下載下傳速度10M/s還是很快,主要參考位址
  3. 該腳本會先下載下傳depot_tools這個項目,再通過depot_tools下載下傳源碼,如果源碼下載下傳失敗,需要重新下載下傳源碼可以不用再下載下傳depot_tools,調用automate-git.py加一個參數,例: --depot-tools-dir=D:\code\chromium_git\depot_tools
::download
set CEF_USE_GN=1
set GN_DEFINES=is_official_build=true ffmpeg_branding=Chrome proprietary_codecs=true
set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/*
set GYP_DEFINES=buildtype=Official
set GYP_MSVS_VERSION=2017
set CEF_ARCHIVE_FORMAT=tar.bz2
python automate-git.py --download-dir=F:\code\chromium_git --branch=3809 --minimal-distrib --client-distrib --force-clean --no-build
pause
::automate-git.py腳本下載下傳位址和為什麼選擇--branch=3809 參考 https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuilding.md

           

編譯過程

  • 如下的全部腳本檔案放到code/automate下
  • 修改源檔案準備支援mp3,mp4,針對win32的話,修改F:\code\chromium_git\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h,把部分#define 由0改為1,針對此操作,我寫了一個腳本修改支援
  • 這些是要改的内容,寫到本地檔案mp4_support.txt
#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
           
  • SupportMp4.py
## 第一參數為上面要修改的#define 的檔案路徑,第二參數為 F:\code\chromium_git\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h
import sys
import shutil
import re
import os

def Replace(change,content):
   str_array = re.findall("#define\s\w+\s",change)
   str_replace =str_array[0]
   str_replace+="0"
   str_dest =str_array[0]
   str_dest+="1"
   return content.replace(str_replace,str_dest)

if len(sys.argv) > 2 :
   src_file_name =sys.argv[1]
   dest_file_name=sys.argv[2]
else:
   src_file_name =raw_input("Please input src file path name:").replace("\r","")
   dest_file_name =raw_input("Please input dest file path name:").replace("\r","")


file_src_handle = open(src_file_name,"r")
file_src_lines = file_src_handle.readlines()
file_src_handle.close()
file_dest_handle = open(dest_file_name,"r")
dest_file_content = file_dest_handle.read()
file_dest_handle.close()

for line in file_src_lines:
    dest_file_content = Replace(line,dest_file_content)

write_file_path = os.getcwd()+"\\"+ os.path.basename(dest_file_name)
ready_copy = open(write_file_path,"w")
ready_copy.write(dest_file_content)
ready_copy.close()

shutil.copy(write_file_path,dest_file_name)
os.remove(write_file_path)
print("Support mp4 Success!!!")
           
  • 再建立一個啟動RunSupportMp4.bat 并運作
python SupportMp4.py F:/code/automate/mp4_support.txt F:/code/chromium_git/chromium/src/third_party/ffmpeg/chromium/config/Chrome/win/ia32/config.h
pause
           
  • 建立env.bat腳本
set path=%path%;F:\code\depot_tools;F:\code\chromium_git\chromium\src
           
  • 建立BuildNinga,Ninga是一個超快的編譯工具,并小巧
env.bat
set CEF_USE_GN=1
set GN_DEFINES=is_official_build=true ffmpeg_branding=Chrome proprietary_codecs=true 
set GYP_DEFINES=buildtype=Official    
set GYP_MSVS_VERSION=2017
set CEF_ARCHIVE_FORMAT=tar.bz2

set GYP_GENERATORS=ninja,msvs-ninja
set GN_ARGUMENTS=--ide=vs2017 --sln=cef --filters=//cef/*

set WIN_CUSTOM_TOOLCHAIN=1
set CEF_VCVARS=none
set GYP_MSVS_OVERRIDE_PATH=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community
set SDK_ROOT=C:\Program Files (x86)\Windows Kits\10
set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\include;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\atlmfc\include;%INCLUDE%
set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\HostX64\x86;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Redist\MSVC\14.13.26020\x64\Microsoft.VC141.CRT;%PATH%
set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\um\x86;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x86;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\lib\x86;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\atlmfc\lib\x86;%LIB%
set VS_CRT_ROOT=C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.13.26128\crt\src\vcruntime
::python automate-git.py --download-dir=e:\buildLib\cef\source --depot-tools-dir=e:\buildLib\cef\depot_tools --branch=3359 --no-update --no-debug-build --build-log-file --verbose-build --force-distrib --force-build
python automate-git.py --download-dir=F:\code\chromium_git --depot-tools-dir=F:\code\depot_tools --branch=3809 --no-update --no-debug-build --build-log-file --verbose-build --force-distrib --force-build
pause
           

如果前面全部都順利的話,你會看到F:\code\chromium_git\chromium\src\out目錄,裡面有一堆準備使用ninga來編譯的工程!!!

最後一步,執行如下操作,然後進行死亡等待

cd F:\code\chromium_git\chromium\src
ninja -C out\Release_GN_x86 cef
           

編譯好後,打開位址F:\code\chromium_git\chromium\src\out\Release_GN_x86 測試有沒有成功支援mp4: http://html5test.com/

出錯解決方案

源碼下載下傳完畢,卡到Resolving deltas: 100% (10224481/10224481), done

這個問題,折騰了我2天,想通過設定代理的方式解決,失敗告終,但我通過奇技淫巧也成功編譯了,首先停止腳本運作,修改一下automate-git.py,把13**多行的,sync git clone — job 16這句注釋調,再執行下載下傳腳本,跳過下載下傳源碼的過程

python ImportError: No module named win32file

參考:點這裡

解決方法:cd 到depot_tools下的bootstrap-3_8_0_chromium_8_bin,然後進入python裡面,給python安裝 pywin32這個庫

python -m pip install pywin32

卡到下載下傳depot_tool位置

修改腳本 automate-git.py 188行,使用下載下傳支援proxy請求

proxies = {'http': 'http://127.0.0.1:61422'}
  opener = FancyURLopener(proxies)