chrome播放B站视频cpu温度异常排查过程(实际和B站无关,真凶为Chrome 155 内置的 Glic(Gemini in Chrome)媒体理解模块)

429_TooManyRequests 2026-10-18 22:38 1

背景


浏览器播放网页(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

最新回复 (18)
  • 蒲君瑶 10-18 22:45
    1楼

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

  • 429_TooManyRequests 楼主 10-18 22:48
    2楼

    下面时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 云端种子静默激活!因此,必须使用不受过期影响的原生方式进行控制。


  • DFobainx 10-18 23:44
    3楼

    应该是真的 我149能搜到


  • jqtmviyu 10-18 23:47
    4楼

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

  • pxw2002 10-18 23:59
    5楼

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

  • 小面包 10-19 00:08
    6楼



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

  • phone 10-19 00:11
    7楼

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

  • 429_TooManyRequests 楼主 10-19 07:55
    8楼

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

  • 429_TooManyRequests 楼主 10-19 07:57
    9楼

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

  • Hifumi Mizuhara 10-19 08:21
    10楼

    强行下模型我是真绷不住

    不喜欢这样的操作

  • wavexu 10-19 08:30
    11楼

    牛批佬 思路值得学习

  • 429_TooManyRequests 楼主 10-19 10:28
    12楼

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

    下面是Gemini自己写的:



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


  • stevefa 10-19 12:59
    13楼

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


    给 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 才有。


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

  • mangL 10-19 13:32
    14楼


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

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

  • fiytodie 10-19 13:50
    15楼

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

  • 奔跑的胖墩墩 10-19 13:56
    16楼

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

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

  • 429_TooManyRequests 楼主 10-19 14:32
    17楼

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

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

  • 庆哥 10-21 01:35
    18楼

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

* 帖子来源Linux.do
返回