• <table id="x5mq0"><track id="x5mq0"></track></table>
  • <code id="x5mq0"><nobr id="x5mq0"><sub id="x5mq0"></sub></nobr></code>

      <pre id="x5mq0"><small id="x5mq0"><p id="x5mq0"></p></small></pre>
    1. <pre id="x5mq0"><small id="x5mq0"><track id="x5mq0"></track></small></pre>

    2. <th id="x5mq0"><video id="x5mq0"></video></th>

      windows下編譯cef最新版本,讓Chromium支持音頻視頻mp3mp4

      在工程中需要用到一些視頻功能。CEF發布的版本并不支持,網絡上編譯發布者也寥寥無幾,即便在茫茫網絡中找到,可能也是比較早的版本或不適合使用。

      編譯目標版本: Chromium 93.0.4577.82 x86

      版本編譯環境:
      硬件: i3-9100 / 16G RAM / 1T固態
      軟件: windows10 x64
      編譯環境:
      Visual Studio 2019 Pro
      Python 3.9
      Windows 10 SDK (10.0.19041.0)
      ninja (python 的編譯工具)
      需要一把能夠摘到蘋果的梯子(網絡環境很重要)

      一. 編譯環境

      準備好你的時間和精力,找到你心目中的白雪公主

      步驟如下:

      1. 找到對應版本,以穩定版本4577(93.0.4577.82)編譯為例
      2. 下載自動編譯腳本automate-git.py
      3. 保存到 c:\cef 目錄下(最好固態聽硬盤100%狂轉聲音心痛)
      4. 執行腳本,下載4577版本編譯
      5. 喝咖啡看書去
      6. 開啟音視頻的支持選項(MP3/MP4)
      7. 執行腳本,編譯Release版本
      8. 繼續喝咖啡看書去
      9. 測試收工

      cef發布版本地址,實際生成要穩定版本,想要吃大閘蟹的直接最新版本
      https://cef-builds.spotifycdn.com/index.html

      下載編譯腳本automate-git.py地址
      https://bitbucket.org/chromiumembedded/cef/raw/master/tools/automate/automate-git.py

      二. 下載編譯版本

      手工敲命令太麻煩

      重點: 如你已經有個能摘到蘋果的梯子(http://127.0.0.1:10809)
      重點: 如你已經有個能摘到蘋果的梯子(http://127.0.0.1:10809)
      重點: 如你已經有個能摘到蘋果的梯子(http://127.0.0.1:10809)

      創建兩個文件用來下載和設置代理

      down4577.bat ---- 下載的命令批處理
      proxy_webrtc.boto ---- 編譯工具的代理配置

      down4577.bat

      echo off
      echo proxy setup ...
      echo --------------------
      netsh winhttp set proxy 127.0.0.1:10809
      git config --global http.proxy http://localhost:1080
      git config --global https.proxy http://localhost:1080
      set https_proxy=http://127.0.0.1:10809
      set http_proxy=http://127.0.0.1:10809
      set BOTO_PATH=C:\cef\proxy_webrtc.boto
      set NO_AUTH_BOTO_CONFIG=C:\cef\proxy_webrtc.boto
      
      echo env setup ...
      echo ----------------------
      set CEF_USE_GN=1
      set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
      set GYP_DEFINES=buildtype=Official
      set GYP_MSVS_VERSION=2019
      set CEF_ARCHIVE_FORMAT=tar.bz2
      set GN_ARGUMENTS=--ide=vs2019 --sln=cef --filters=//cef/*
      
      python automate-git.py --download-dir=C:\cef\src4577 --branch=4577 --no-build
      
      pause
      

      proxy_webrtc.boto

      [Boto]
      proxy = 127.0.0.1
      proxy_port = 10809
      proxy_type = http
      

      具體參數看下面說明,下載時需要注意些內容

      注:

      • bat中netsh winhttp命令需要管理員權限
      • 有裝TortoiseGit的把Shell圖標更新關閉
      • 有殺毒的也最好關了
      • 用完proxy注意關,以免影響其他程序
      • 注意關掉電腦睡眠功能

      三. 設置編譯參數,開啟音視頻支持

      創建編譯配置文件:

      1. mp4_config.txt ---- 開啟參數配置定義
      2. update_mp4.py ---- 更新腳本
      3. udpate_mp4.bat ---- 更新執行命令

      上面的文件全部都放在 c:\cef 目錄下

      mp4_config.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
      

      update_mp4.py 更新腳本

      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","")
      
      print(src_file_name)
      print(dest_file_name)
      
      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!!!")
      

      update_mp4.bat 執行腳本,修改x64和x86的編譯開關

      python update_mp4.py c:/cef/mp4_config.txt C:/cef/src4577/chromium/src/third_party/ffmpeg/chromium/config/Chrome/win/ia32/config.h
      python update_mp4.py c:/cef/mp4_config.txt C:/cef/src4577/chromium/src/third_party/ffmpeg/chromium/config/Chrome/win/x64/config.h
      pause
      

      四. 編譯Release版本

      批處理文件
      build_x86_4577.bat

      開啟后編譯是最終結果(需要的版本),只用于發布的話release版本足以。全編太耗時了,現在想到要買i9的好處,或公司內組網編譯

      創建 build_x86_4577.bat 編譯x86 Release批處理

      set https_proxy=http://127.0.0.1:10809
      set http_proxy=http://127.0.0.1:10809
      set BOTO_PATH=C:\cef\proxy_webrtc.boto
      set NO_AUTH_BOTO_CONFIG=C:\cef\proxy_webrtc.boto
      
      set PYTHONLEGACYWINDOWSSTDIO=utf8
      set PYTHONIOENCODING=utf8
      set PYTHONUTF8=1
      set CEF_USE_GN=1
      set GN_DEFINES=is_official_build=true proprietary_codecs=true ffmpeg_branding=Chrome
      set GYP_DEFINES=buildtype=Official
      set GYP_MSVS_VERSION=2019
      set CEF_ARCHIVE_FORMAT=tar.bz2
      set DEPOT_TOOLS_WIN_TOOLCHAIN=0
      set GYP_GENERATORS=ninja,msvs-ninja
      set GN_ARGUMENTS=--ide=vs2019 --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\2019\Professional
      set SDK_ROOT=C:\Program Files (x86)\Windows Kits\10
      set INCLUDE=C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um;C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt;C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\include;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\atlmfc\include;%INCLUDE%
      set PATH=C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\bin\HostX64\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\bin\HostX64\x64;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Redist\MSVC\14.29.30133\x64\Microsoft.VC141.CRT;%PATH%
      set LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\um\x86;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\lib\x86;C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\atlmfc\lib\x86;%LIB%
      set VS_CRT_ROOT=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.29.30133\crt\src\vcruntime
      
      python automate-git.py --download-dir=C:\cef\src4577 --branch=4577 --build-log-file --verbose-build --force-distrib --force-build --no-debug-build --no-update
      
      pause
      

      Win SDK 目錄 C:\Program Files (x86)\Windows Kits\10
      VS 2019 目錄 C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional

      根據實際情況替換

      注: 要x64的版本,在最后 python 編譯命令最后加 --x64-build 選項

      python automate-git.py --download-dir=C:\cef\src4577 --branch=4577 --build-log-file --verbose-build --force-distrib --force-build --no-debug-build --no-update --x64-build
      

      具體參數看下面說明

      執行命令等完成,最好找點其他事做,如喝咖啡看書啊之類的。

      五. 驗收成果

      編譯完成后在out目錄下會生成很多測試exe,方便檢查編譯的相關功能

      輸出目錄

      C:\cef\src4577\chromium\src\out
      

      打開 cefclient.exe 文件,打開http://html5test.com簡單查看功能編譯情況

      編譯測試通過的CEF x86版本,保留了發布用文件,如需要可自取。壓縮包里帶了兩個測試exe

      cefclient.exe  編譯cef時產生的
      SimpleBrowser2.exe 自己編譯的測試文件  
      
      Chromium 93.0.4577.82
      鏈接:https://pan.baidu.com/s/10YOd0M3injp39BMl-Ts3Dw 
      提取碼:1a7n
      

      編譯個版本真不容易,太吃CPU全程100%好幾小時,沒有好的CPU或沒有組網(VS企業版有分布式編譯),編譯版本太累。

      六. 編譯參數說明

      上面使用的的參數

      --help 編譯選項明細列表
      --download-dir 源碼下載目錄
      --depot-tools-dir工具包目錄
      --branch 源碼分支(默認trunk主分支)
      --no-build 下載完不自動開始編譯(需要修改編譯配置)
      --no-update 確定源碼下載完畢僅重新編譯時使用
      --force-build 強制編譯(發現在有成功編譯的時候再編譯不會執行,可以加上這個
      --no-debug-build 只編譯release版本
      --no-release-build 只編譯debug版本

      七. 其他相關問題

      1. Visual Studio 2019 版本問題

      Q: 電腦上原來安裝的是社區版本,不知道什么情況沒編譯成功,浪費了不少時間
      A: 改裝了Pro版本就OK

      2. Windows的編譯環境問題

      Q: 機器上裝了很多編譯環境, msys64、FPC等
      A: 直接把目錄名字加 .bak防止搜索到不該使用的編譯器

      3. tortoise git status cache 消耗大量CUP資源,處理方法

      Q: 在下載和編譯時git目錄會頻繁更新目錄內的文件,TortoiseGit會刷新Shell的圖標,導致大量消耗寶貴的CUP。編譯時先關閉Shell的圖標刷新
      A: 關閉 TortoiseGit Shell, 在資源管理器中右擊選擇設置

      Settings->Icon Overlays->Status cache->None
      

      4. 要命的GBK Python編碼問題

      Q: windows下默認是GBK的,python在讀取文件時在沒指定編碼的情況下會直接使用環境信息,編譯到一半花費了大量時間,中間Error GBK錯誤,吐血

          bundled_paths = _bundle_v3(tmp_out_dir, in_path, out_path,
        File "../../chrome/browser/resources/tools/optimize_webui.py", line 185, in _bundle_v3
          output = f.read()
      UnicodeDecodeError: 'gbk' codec can't decode byte 0xa2 in position 137404: illegal multibyte sequence
      [26852/50270] ninja -t msvc -e environment.x86 -- ..\..\third_party\llvm-build\Release+Asserts\bin\lld-link.exe /OUT:./bytecode_builtins_list_generator.exe /nologo -libpath:..\..\third_party\llvm-build\Release+Asserts\lib\clang\13.0.0\lib\windows "-libpath:../../../../../../Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/ATLMFC/lib/x86" "-libpath:../../../../../../Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/lib/x86" "-libpath:../../../../../../Program Files (x86)/Windows Kits/NETFXSDK/4.8/lib/um/x86" "-libpath:../../../../../../Program Files (x86)/Windows Kits/10/lib/10.0.19041.0/ucrt/x86" "-libpath:../../../../../../Program Files (x86)/Windows Kits/10/lib/10.0.19041.0/um/x86"  /PDB:./bytecode_builtins_list_generator.exe.pdb @./bytecode_builtins_list_generator.exe.rsp
      

      A: 解決方法:第一種,設置全局環境utf-8 set PYTHONUTF8=1,第二種,設置你的window變成英文(這個也不錯)

      set PYTHONLEGACYWINDOWSSTDIO=utf8
      set PYTHONIOENCODING=utf8
      set PYTHONUTF8=1
      

      沒空去試,上面三個那個正確全設上 stackoverflow參考

      參考地址: https://stackoverflow.com/questions/50933194/how-do-i-set-the-pythonutf8-environment-variable-to-enable-utf-8-encoding-by-def

      5. Windows SDK 問題

      Q: 安裝VS2019是裝了SDK,但Windows SDK目錄不知道在那里
      A: 獨立下載安裝了個WinSDK,目錄默認C:\Program Files (x86)\Windows Kits\10

      下載地址: https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk/

      6. 取消Git全局代理

      git config --global --unset http.proxy
      git config --global --unset https.proxy
      

      7. 取消winhttp全局代理

      netsh winhttp reset proxy
      

      8. 安裝 ninja

      pip install ninja
      

      END(Moguf.com 蘑菇房)

      亚洲成A∨人片在线观看无码
    3. <table id="x5mq0"><track id="x5mq0"></track></table>
    4. <code id="x5mq0"><nobr id="x5mq0"><sub id="x5mq0"></sub></nobr></code>

        <pre id="x5mq0"><small id="x5mq0"><p id="x5mq0"></p></small></pre>
      1. <pre id="x5mq0"><small id="x5mq0"><track id="x5mq0"></track></small></pre>

      2. <th id="x5mq0"><video id="x5mq0"></video></th>