# 给 Chromium 浏览器手动装 Widevine DRM 组件


Chrome、Edge 自带 Widevine；Helium、ungoogled-chromium 这类不带，DRM 站点直接拒绝播放。原因在 Google 的授权策略：认证要一万美元级别，Helium 选择不内置（[官方 FAQ](https://helium.computer/)、[issue #116](https://github.com/imputnet/helium/issues/116)）。网上常见的办法是装个 Chrome 把组件复制过来，其实同一个组件包直接就能从 Google CDN 下载。方法对所有 Chromium 系浏览器通用，差别只在最后放文件的目录。

## 下载组件

组件包是 Google 的，Google 不提供公开直链；Mozilla 在 Firefox 源码树里维护着一份指向这些包的清单：[gmp-sources/widevinecdm.json](https://raw.githubusercontent.com/mozilla-firefox/firefox/refs/heads/main/toolkit/content/gmp-sources/widevinecdm.json) 记录各平台的下载地址和 sha512 校验值，Firefox 自己的 DRM 组件就按这份清单下载。包托管在 Google CDN（`edgedl.me.gvt1.com`），Windows 64 位的平台键是 `WINNT_x86_64-msvc`，Linux 是 `Linux_x86_64-gcc3`。

## 解开 crx3

清单给的是 `.crx3` 文件：开头 12 字节（`Cr24` 魔数 + 版本号 + header 长度），接着一段 protobuf 头，再往后是标准 zip。跳过 12 + header 长度字节直接解压，得到 `manifest.json` 和平台子目录（win64 是 `_platform_specific/win_x64/widevinecdm.dll`）。

PowerShell 全流程：

```powershell
$json = Invoke-RestMethod 'https://raw.githubusercontent.com/mozilla-firefox/firefox/refs/heads/main/toolkit/content/gmp-sources/widevinecdm.json'
$p = $json.vendors.'gmp-widevinecdm'.platforms.'WINNT_x86_64-msvc'

Invoke-WebRequest $p.fileUrl -OutFile "$env:TEMP\widevine.crx3"
(Get-FileHash "$env:TEMP\widevine.crx3" -Algorithm SHA512).Hash.ToLower() -eq $p.hashValue   # 应为 True

$b = [IO.File]::ReadAllBytes("$env:TEMP\widevine.crx3")
$hlen = [BitConverter]::ToUInt32($b, 8)
[IO.File]::WriteAllBytes("$env:TEMP\widevine.zip", $b[(12 + $hlen)..($b.Length - 1)])
Expand-Archive "$env:TEMP\widevine.zip" "$env:TEMP\widevine"
(Get-Content "$env:TEMP\widevine\manifest.json" | ConvertFrom-Json).version   # 例如 4.10.3050.0
```

## 安装位置

Chromium 的组件扫描器认两处：浏览器安装目录（升级会被覆盖）和用户数据目录。放用户数据目录，一劳永逸：

```
%LOCALAPPDATA%\<品牌目录>\User Data\WidevineCdm\<组件版本>\
```

以 Helium 为例就是 `%LOCALAPPDATA%\imput\Helium\User Data\WidevineCdm\4.10.3050.0\`。中间的品牌目录每家不同：Google Chrome 是 `Google\Chrome`，Chromium 本体只有一级 `Chromium`。拿不准就在浏览器里打开 `chrome://version`，看「个人资料路径」（Profile Path）一行，`User Data` 之前的部分照抄即可。

版本子目录的名字用 manifest 里读到的值，crx3 解出来的文件原样放进去（`manifest.json` 和 `_platform_specific` 整个目录都在内）。组件扫描器只枚举版本号形态的子文件夹，把文件平铺在 `WidevineCdm` 根下不会被发现。

```powershell
$v = (Get-Content "$env:TEMP\widevine\manifest.json" | ConvertFrom-Json).version
$dest = "$env:LOCALAPPDATA\imput\Helium\User Data\WidevineCdm\$v"   # 换成你的浏览器路径
New-Item $dest -ItemType Directory -Force
Copy-Item "$env:TEMP\widevine\*" $dest -Recurse -Force
```

## 验证

完全退出浏览器（托盘里也退掉）再打开，访问 `chrome://components`（部分 fork 会把 scheme 换成自家名，如 `helium://components`）。Widevine Content Decryption Module 显示 `4.10.3050.0` 而不是 `0.0.0.0` 就是装上了。播放测试可以用 [bitmovin 的 DRM demo](https://bitmovin.com/demos/drm)。

Spotify 网页版、B 站这类 L3 站点正常播放；Netflix、Disney+ 这类要求 L1 硬件级安全（VMP）的站点仍会拒绝，这是认证级别的差距，与组件无关。issue #116 里其他人实测过 Helium，结果一致：HBO、Hulu 能放，Netflix 不行。

CDM 的接口版本（4/10/10）多年未变，浏览器升级不需要重装组件；Google 出新版组件后重跑一遍上面的脚本即可。


---

> 作者: Nite  
> URL: https://www.nite07.com/zh-cn/posts/chromium-widevine-cdm/  

