Widevine / EME(DRM)
Widevine CDM をオプトインで有効にすると、DRM で保護された動画を再生できます(実際の Chrome の EME サーフェスとも一致します)。CDM は、標準の Chrome が受け取るのとまったく同じ方法で、実行時に取得されます。
オプトインになっている理由
Clearcote には EME/Widevine の基盤部分がコンパイル済みで組み込まれています(enable_widevine)が、Google のプロプライエタリな CDM は含まれていません。Clearcote はこの CDM を再配布しておらず、そもそもオープンソースのビルドに同梱することもできません。CDM がないと navigator.requestMediaKeySystemAccess('com.widevine.alpha') は reject されます。これは DRM が動かないという問題であると同時に、整合性の手がかりにもなります(実際の Chrome では resolve されます)。そのため、ダウンロードはユーザー自身が実行します。Clearcote が CDM を配布することはありません。
有効にする
widevine を指定します。SDK は Google 自身のコンポーネントサーバーから CDM を一度だけダウンロードし、SHA-256 を検証してプロファイルに配置し、有効化します。これで DRM ページを再生できます。launch_persistent_context で使えるほか、SDK 0.23 以降は、シークレットモードではなく使い捨てのプロファイルで動作するようになった Python の launch() でも使えます。Node では launchPersistentContext を使ってください(launch() の TypeScript 型はまだ widevine を宣言していません)。対応しているのは Python と Node で、.NET SDK にはまだ Widevine オプションがありません。
from clearcote import launch_persistent_context
ctx = launch_persistent_context("./profile-drm", widevine=True) # fetch + seed + enable the CDM
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://your-drm-site.example")
# navigator.requestMediaKeySystemAccess('com.widevine.alpha') now resolvesimport { launchPersistentContext, fetchWidevine } from "clearcote";
// optional: pre-fetch the CDM ahead of time (cached under ~/.clearcote/WidevineCdm)
await fetchWidevine();
const ctx = await launchPersistentContext("./profile-drm", { widevine: true });仕組みと制限
- オプトインで、ユーザー操作によって実行:CDM は Google のコンポーネントサーバーから一度だけダウンロードされ、SHA-256 で検証され(ハッシュがない場合は拒否されます。ネイティブ DLL だからです)、
~/.clearcote/WidevineCdm以下にキャッシュされます(場所はCLEARCOTE_WIDEVINE_DIRで変更できます)。fetch_widevine()/fetchWidevine()で事前に取得しておくこともできます。また、widevineを指定して起動するたびに、Google のアップデートサーバーへのバージョン確認が 1 回行われます。この通信はプロキシを経由せず、このマシンから直接行われます。 - プロファイルが必要:CDM はプロファイル内に置かれるため、同期版の
launch()とlaunch_persistent_contextでは使えますが、シークレットモードでの起動(ephemeral_profile=False、非同期版のlaunch())では使えません。エンジンが CDM を登録できるよう、SDK はコンポーネントアップデーターの抑止を解除します(Windows では高速更新のスキャンも強制します)。Windows と Linux で動作します。 - Docker:公式イメージでは、Windows ペルソナの場合にデフォルトで有効になります(無効にするには
CC_WIDEVINE=0)。 - ソフトウェアセキュア(L3)での再生に対応します。ハードウェアセキュア(L1)は対象外です。
- ベストエフォート:CDM を取得できない場合やバージョン確認に失敗した場合(オフラインのときなど)でも、起動は失敗せず、DRM なしで続行されます。
DRM への対応も、整合性のあるアイデンティティを構成する要素の 1 つです。実際の Chrome は Widevine の問い合わせに応答するため、応答できないペルソナはそれ自体が手がかりになります。しかもデフォルトのペルソナは Google Chrome として振る舞い、Google Chrome はすべてのデスクトッププラットフォームで CDM を同梱しています。検知の仕組みを参照してください。