• 429_TooManyRequests

    背景

    浏览器播放网页(B 站等)视频时,CPU 单核长期满转,核心温度上升至 ~70°C,风扇开始呼呼转,觉得很不合理

    排查过程

    歧路

    - 1.设置网页视频硬解码,设置后不生效。

    - 2.播放过程排查到 chrome media.mojom.SpeechRecognitionService 子进程 CPU占用 20%~135% 之间波动(人声密集视频负载极高,纯音乐/轻音段负载较低);视频点击暂停,该进程 CPU 占用秒级跌至 0%;恢复播放立刻反弹。 怀疑时字幕翻译相关插件影响,关闭翻译插件、字幕插件不生效。

    - 3.继续怀疑插件,disabled 所有浏览器扩展,依旧不生效。

    - 4.无痕模式播放视频,正常了,奇怪。。。。

    正途

    - 离线检查 Default\Preferences,发现唯一的字幕激活项是 "headless_caption_enabled": true。

    - 在 Chrome 完全关闭的状态下将其手工置为 false,重新打开 Chrome 播放视频,该配置在数秒内被 Chrome 运行时再次写回 true。

    - 尝试改名移除 User Data\SODA 启动后又重新生效,根本关不掉。

    对chrome.dll 进行分析,还原为啥headless_caption_enabled被重新打开:

    图片

    图片

    还把youtube过滤掉了,把自己摘的干干净净,Google 你好狠啊。

    修复方案

    chrome://flags 找不到相关设置,配置方法可以参考下面的脚本。```
    import glob
    import json
    import os
    import shutil
    import subprocess

    def is_chrome_running() -> bool:
    res = subprocess.run(
    ["tasklist", "/FI", "IMAGENAME eq chrome.exe", "/NH"],
    capture_output=True,
    text=True,
    check=False,
    )
    return "chrome.exe" in res.stdout.lower()

    def main() -> None:
    if is_chrome_running():
    print("[!] 检测到 chrome.exe 正在运行。请先完全退出 Chrome 后再执行本脚本,以免配置被运行中的进程覆盖。")
    return

    base = os.path.join(os.environ["LOCALAPPDATA"], r"Google\Chrome\User Data")

    # 1. Local State: 显式禁用 enable-headless-live-caption 与 enable-headless-live-caption-early-start
    ls_path = os.path.join(base, "Local State")
    if os.path.exists(ls_path):
    shutil.copy2(ls_path, ls_path + ".bak-glic-fix")
    with open(ls_path, "r", encoding="utf-8") as f:
    ls_data = json.load(f)
    browser = ls_data.setdefault("browser", {})
    labs = browser.setdefault("enabled_labs_experiments", [])
    # 移除已有的同名项并写入 @2 (Disabled)
    labs = [
    x for x in labs
    if not x.startswith("enable-headless-live-caption@")
    and x != "enable-headless-live-caption"
    and not x.startswith("enable-headless-live-caption-early-start@")
    and x != "enable-headless-live-caption-early-start"
    ]
    labs.append("enable-headless-live-caption@2")
    labs.append("enable-headless-live-caption-early-start@2")
    browser["enabled_labs_experiments"] = labs
    with open(ls_path, "w", encoding="utf-8") as f:
    json.dump(ls_data, f, ensure_ascii=False, separators=(",", ":"))
    print("[+] Local State 已更新: 显式写入 enable-headless-live-caption@2 与 enable-headless-live-caption-early-start@2")

    # 2. Default / Profile Preferences: 关闭 glic.completed_fre、glic.media_understanding_enabled 与 headless_caption_enabled
    pref_paths = glob.glob(os.path.join(base, "Default", "Preferences")) + glob.glob(
    os.path.join(base, "Profile *", "Preferences")
    )
    for pref_path in pref_paths:
    shutil.copy2(pref_path, pref_path + ".bak-glic-fix")
    with open(pref_path, "r", encoding="utf-8") as f:
    pref_data = json.load(f)

    captions = pref_data.setdefault("accessibility", {}).setdefault("captions", {})
    captions["headless_caption_enabled"] = False
    captions["live_caption_enabled"] = False

    glic = pref_data.setdefault("glic", {})
    glic["completed_fre"] = 0
    glic["media_understanding_enabled"] = False
    glic["closed_captioning_enabled"] = False

    with open(pref_path, "w", encoding="utf-8") as f:
    json.dump(pref_data, f, ensure_ascii=False, separators=(",", ":"))
    rel = os.path.relpath(pref_path, base)
    print(f"[+] {rel} 已更新: headless_caption_enabled=false, glic.completed_fre=0, glic.media_understanding_enabled=false")

    if __name__ == "__main__":
    main()
    ```关闭后播放视频 cpu核心温度 40度,风扇也不呼呼转了。


    单独的设置 可以参考这位佬的回帖: chrome播放B站视频cpu温度异常排查过程(实际和B站无关,真凶为Chrome 155 内置的 Glic(Gemini in Chrome)媒体理解模块) - #14,来自 stevefa

    主楼
  • 蒲君瑶

    操作这么恶心的吗,没提供开关啊

    #1
  • 429_TooManyRequests

    下面时Gemini自己的狡辩,姑且相信它 ^-^

    为什么在 chrome://flags 界面找不到这两个开关?
    通过逆向反汇编 chrome.dll 的 Flag 元数据表(flags_metadata.cc,RVA 0x1044f620),我们发现:

    Flag: enable-headless-live-caption            Expiration Milestone: 150 (0x96)
    Flag: enable-headless-live-caption-early-start Expiration Milestone: 150 (0x96)
    ```>
    按照 Chromium 规则:**只要某个 Flag 的过期里程碑小于当前浏览器版本(150 < 155),该 Flag 就会在 `chrome://flags` 的 Web UI 列表中被自动隐藏**,搜索或 Hash 定位均不会显示。
    但**底层的 C++ 特性(`kHeadlessLiveCaption`)依然被 Google Finch 云端种子静默激活**!因此,必须使用不受过期影响的原生方式进行控制。
    #2
  • DFobainx

    应该是真的 我149能搜到

    图片

    #3
  • jqtmviyu

    brave 逃过一劫, 默认关闭. 自从之前听到下载离线模型, 就算开发调试也只装第三方版

    #4
  • pxw2002-linuxdo

    这好扯淡啊 这是相当于一个本地语音转文字的模块?

    #5
  • 小面包

    图片

    还有自动更新浏览器的来了

    #6
  • phone

    chrome不给取消自动更新真无语,把用户当小白鼠

    #7
  • 429_TooManyRequests

    关了吧,我是一个cpu 核心被拉满了

    #8
  • 429_TooManyRequests

    是的 默认所有音频给你转字幕,还关不掉

    #9
  • Hifumi_Mizuhara

    强行下模型我是真绷不住

    不喜欢这样的操作

    #10
  • wavexu

    牛批佬 思路值得学习

    #11
  • 429_TooManyRequests

    确实恶心,排查了很久才查找源头 差点把锅给沉浸式翻译的视频字幕功能了,没想到把所有扩展关掉 也是这样。

    下面是Gemini自己写的:

    现代浏览器集成大模型(如 Chrome 的 Gemini/Glic)后,引入了越来越多的“后台多模态感知”能力(如静默媒体理解、屏幕快照理解)。即使界面上没有开启字幕浮窗,后台也会静默调取数十万参数的本地神经网络进行实时流式转写,对桌面 CPU 带来极为显著的算力与发热开销。

    #12
  • stevefa

    终于有人扒出来了,我这边一模一样。

    给 mac 的佬友补一刀:其实有开关,不用动 Local State。设置里直接搜「媒体理解」,或者 chrome://settings/ai/gemini 拉到最下面,那个开关关掉就完事了。

    阴间的是它是独立的 —— 「在浏览器顶部显示 Gemini」我是关的,菜单栏那个也关的,无障碍里的实时字幕也是关的,看着像全关了,结果就它偷偷开着。

    拿 top 对了下数据:播视频的时候 speech 那进程稳定 0.2~0.25 个核,抖音 B 站都一样,随便找个裸 html5 video 页面放是 0.17(大概因为片子里没人说话),暂停立刻掉回 0。关掉媒体理解再重放,0.005,基本没了。

    顺便 flags 页是真搜不到,我跳 #enable-headless-live-caption 过去是空的,根本没注册成 flag,楼主没记错。mac 包里 libaperitif.dylib 也照样带着,不是 win 才有。

    感谢佬友,省了我半天时间

    #13
  • mangL

    图片

    我这只显示了这一个,版本是:137.0.7151.120(好久没去更新了)。

    我这关这一个,都好了很多,佬牛!

    #14
  • fiytodie

    我记得刚买MacBook的时候啥都装,然后用夸克看B站也有异常占用的情况,当时也是hermes一通分析几个小时,给了一大堆分析报告,反正大概意思是夸克播放器的问题,用的软解而不是硬解,也没法在设置里面修复,最后要提交BUG的时候怎么也找不到入口,留言+留邮箱也没人回

    #15
  • 奔跑的胖墩墩

    Chrome感觉除了自动登陆谷歌账号这块用全家桶方便点,其他方面感觉都臃肿

    自从换成helium之后,体感好多了

    #16
  • 429_TooManyRequests

    软解硬解现在对cpu 影响都不是很大,cpu能力都很强

    但跑语音识别还是挺费cpu的

    #17
  • 庆哥

    tmd,我说怎么最近我电脑(i7-4700kf + 4080s)看b站风扇呼呼转。问gpt怎么解决给了链接到这儿

    #18

发表回复

登录后回复