本文へスキップ

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 オプションがありません。

python
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 resolves
javascript
import { 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 を同梱しています。検知の仕組みを参照してください。