Chromium headless模式開發(fā)的一切

獲取和編譯chromium

Linux:https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/linux/build_instructions.md

Windows:https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/windows_build_instructions.md

Mac:https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/mac_build_instructions.md

重要文檔

headless模式:https://chromium.googlesource.com/chromium/src/+/lkgr/headless

Vscode配置:https://chromium.googlesource.com/chromium/src/+/refs/heads/main/docs/vscode.md

源碼查看:https://source.chromium.org/chromium/chromium/src

GN構(gòu)建參數(shù):https://www.chromium.org/developers/gn-build-configuration

Linux安裝依賴

安裝上依賴,不安裝會有缺庫等問題。

yum install git python bzip2 tar pkgconfig atk-devel alsa-lib-devel \
bison binutils brlapi-devel bluez-libs-devel bzip2-devel cairo-devel \
cups-devel dbus-devel dbus-glib-devel expat-devel fontconfig-devel \
freetype-devel gcc-c++ glib2-devel glibc.i686 gperf glib2-devel gtk2-devel \
gtk3-devel java-1.*.0-openjdk-devel libatomic libcap-devel libffi-devel \
libgcc.i686 libgnome-keyring-devel libjpeg-devel libstdc++.i686 libX11-devel \
libXScrnSaver-devel libXtst-devel libxkbcommon-x11-devel ncurses-compat-libs \
nspr-devel nss-devel pam-devel pango-devel pciutils-devel \
pulseaudio-libs-devel zlib.i686 httpd mod_ssl php php-cli python-psutil wdiff \
xorg-x11-server-Xvfb

設(shè)置代理獲取chromium代碼

git 設(shè)置代理:

git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy https://127.0.0.1:1080

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

全局代理:

export http_proxy="http://127.0.0.1:1080"
export https_proxy="https://127.0.0.1:1080"

Boto代理設(shè)置:

[Boto文件]
proxy=127.0.0.1
proxy_port = 1080

然后設(shè)置:
export NO_AUTH_BOTO_CONFIG=/usr/local/dev/chromium/chromium_src/http_proxy.boto(linux)
set NO_AUTH_BOTO_CONFIG=E:\chromium_src\httpproxy.boto (windows)

參考文章:
Windows源碼下載編譯:https://blog.berd.moe/archives/get-code-and-compile-chromium/
代理使用心得:https://blog.csdn.net/Vincent95/article/details/79828480

Chromium默認(rèn)編譯不支持音視頻的播放

為了避免授權(quán)和專利的問題,在 Chromium 中是不能直接內(nèi)置音頻以及視頻解碼器的,所以就造成了默認(rèn)編譯出來的 Chromium 不能播放音視頻。

解決方法是,在args.gn文件中增加編譯參數(shù)

proprietary_codecs = true
ffmpeg_branding = "Chrome"

chromium官方文檔中對此說明

GN Flags
There are a few GN flags which can alter the behaviour of Chromium's HTML5 audio/video implementation.

ffmpeg_branding
  Overrides which version of FFmpeg to use
  Default: $(branding)
  Values:
    Chrome - includes additional proprietary codecs (MP3, etc..) for use with Google Chrome
    Chromium - builds default set of codecs

proprietary_codecs
  Alters the list of codecs Chromium claims to support, which affects <source> and canPlayType() behaviour
  Default: 0(gyp)/false(gn)
  Values:
    0/false - <source> and canPlayType() assume the default set of codecs
    1/true - <source> and canPlayType() assume they support additional proprietary codecs

加速編譯

Chromium官方文檔中提供了一些可以加速編譯的GN編譯項。

symbol_level = 0
blink_symbol_level= 0
enable_nacl = false

一些重要的編譯參數(shù)介紹

  • is_debug。這個選項值可以為true或者false。當(dāng)為true時編譯debug版本,false時編譯release版本。

  • is_component_build。這個選項值可以為true或者false。當(dāng)為true時將chromium代碼編譯成多個小的dll,false時代碼編譯成單個dll。一般我們編譯debug版本時,設(shè)置is_component_build = true,這樣每次改動編譯鏈接花費(fèi)的時間就會減少很多。編譯release版本時,設(shè)置is_component_build = false,這樣就可以把所有代碼編譯到一個dll里面。

  • target_cpu。這個選項值為字符串,控制我們編譯出的程序所匹配的cpu。編譯32位x86版本設(shè)置成target_cpu =”x86″,編譯64位x64版本設(shè)置成target_cpu =”x64″。如果我們沒有顯式指定target_cpu的值,那么target_cpu的值為編譯它的電腦所用的cpu類型。通常target_cpu的值為x86會比x64編譯速度更快,并且支持增量編譯。另外如果設(shè)置了target_cpu =”x86″,也必須設(shè)置enable_nacl = false,否則編譯速度會慢很多。

  • enable_nacl。這個選項值可以為true或者false??刂剖欠駟⒂肗ative Client,通常我們并不需要。所以把其值設(shè)置成enable_nacl = false。

  • is_clang。這個選項值可以為true或者false??刂剖欠駟⒂胏lang進(jìn)行編譯。目前m63 clang編譯還不穩(wěn)定,所以這個選項設(shè)置成is_clang = false。m64開始支持clang編譯。

  • ffmpeg_branding=”Chrome” proprietary_codecs=true。這個兩個選項是控制代碼編譯支持的多媒體格式跟chrome一樣,支持mp4等格式。

  • symbol_level。其值為整數(shù)。當(dāng)值為0時,不生成調(diào)試符號,可以加快代碼編譯鏈接速度。當(dāng)值為1時,生成的調(diào)試符號中不包含源代碼信息,無法進(jìn)行源代碼級調(diào)試,但是可以加快代碼編譯鏈接速度。當(dāng)值為2時,生成完整的調(diào)試符號,編譯鏈接時間比較長。

  • is_official_build。這個選項值可以為true或者false??刂剖欠駟⒂胦fficial編譯模式。official編譯模式會進(jìn)行代碼編譯優(yōu)化,非常耗時。僅發(fā)布的時候設(shè)置成is_official_build = true開啟優(yōu)化。

GN編譯命令

# 生成編譯目錄
gn gen out/Default

# 設(shè)置編譯目錄的編譯參數(shù)
gn args out/Default

# 查看編譯目錄的編譯參數(shù)
gn args --list out/Default

# 啟動編譯
ninja -C out/Default

# headless_shell編譯
ninja -C out/Release headless_shell

headless_shell編譯參數(shù)

##### debug

import("http://build/args/headless.gn")
is_component_build = true
is_debug = true
symbol_level = 0
blink_symbol_level= 0
enable_nacl = false
proprietary_codecs = true
ffmpeg_branding = "Chrome"

#### release

import("http://build/args/headless.gn")
is_component_build = false
is_debug = false
symbol_level = 0
blink_symbol_level= 0
enable_nacl = false
proprietary_codecs = true
ffmpeg_branding = "Chrome"

Chromium中視頻不自動播放

chromuim 66 版本以后的內(nèi)核,在默認(rèn)情況下<video>和<audio>標(biāo)簽已經(jīng)不能自動播放了。需要用戶點擊觸發(fā)后才播放,或者要把播放設(shè)置為靜音模式才可自動播放。

解決方法是,啟動參數(shù)中增加--autoplay-policy=no-user-gesture-required來關(guān)閉這個默認(rèn)策略。

啟動參數(shù)

chrome:

./out/Default/chrome --headless --no-sandbox --ignore-certificate-errors --ignore-ssl-errors --disable-gpu --disable-software-rasterizer --remote-debugging-port=9222 https://www.baidu.com

headless_shell:

./out/Release/headless_shell --no-sandbox --ignore-certificate-errors --ignore-ssl-errors --disable-gpu --disable-software-rasterizer --remote-debugging-address=0.0.0.0 --remote-debugging-port=9222 https://www.baidu.com

headless_shell進(jìn)程指令

查看headless_shell進(jìn)程是否存在

ps -ef | grep headless_shell

關(guān)閉headless_shell進(jìn)程

pkill -f '(chrome)?(--headless)'

VirtualBox虛擬機(jī)遠(yuǎn)程調(diào)試

  1. 啟動參數(shù)增加--remote-debugging-address=0.0.0.0 --remote-debugging-port=9222。
  2. 關(guān)閉虛擬機(jī)中操作系統(tǒng)的防火墻,或者開放9222端口。
  3. VirtualBox設(shè)置端口轉(zhuǎn)發(fā),從子系統(tǒng)9222到主機(jī)任意可用端口。
  4. 瀏覽器打開chrome://inspect/#devices開始調(diào)試。

調(diào)試相關(guān)

調(diào)試地址:chrome://inspect/#devices

一些調(diào)試接口:

  1. http://127.0.0.1:9222/json 查看已經(jīng)打開的Tab列表
  2. http://127.0.0.1:9222/json/version : 查看瀏覽器版本信息
  3. http://127.0.0.1:9222/json/new?http://www.baidu.com : 新開Tab打開指定地址
  4. http://127.0.0.1:9222/json/close/8795FFF09B01BD41B1F2931110475A67 :關(guān)閉指定Tab,close后為tab頁面的id
  5. http://127.0.0.1:9222/json/activate/5C7774203404DC082182AF4563CC7256 : 切換到目標(biāo)Ta

chromium C++與javascript互操作

  • 仿照extensions_v8::LoadTimesExtension

  • 在ChromeContentRendererClient的函數(shù)RenderThreadStarted()中注冊

    thread->RegisterExtension(extensions_v8::XXXXExtension::Get());

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

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

  • 0、設(shè)置代理 根據(jù)自己的代理服務(wù)器來具體設(shè)置。git config --global http.proxy "12...
    Wonton_skin閱讀 6,899評論 0 2
  • Google WebRtc 編譯 前段時間有同學(xué)留言如何編譯 webrtc,寫給需要的你,關(guān)注微信公眾號 他曉,進(jìn)...
    他曉閱讀 1,743評論 0 1
  • To check from which revision a certain build is released,...
    擺_渡閱讀 9,251評論 1 2
  • 系統(tǒng)要求 64位系統(tǒng),不支持32位 內(nèi)存最好大于16GB 磁盤大小要超過100GB用于編譯 系統(tǒng)選擇,google...
    oaiMZX苗閱讀 4,162評論 3 1
  • 1.系統(tǒng)要求 運(yùn)行10.12.6或更高版本的64位Mac。Xcode 10.0+。JDK的當(dāng)前版本(Closure...
    Mr_Watson閱讀 5,617評論 10 2

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