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

目录

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

下载组件

组件包是 Google 的,Google 不提供公开直链;Mozilla 在 Firefox 源码树里维护着一份指向这些包的清单: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 全流程:

$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 根下不会被发现。

$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。

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

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

编辑此页

目录