Widevine / EME (DRM)
Lisez des vidéos protégées par DRM (et reproduisez la surface EME d’un vrai Chrome) en activant explicitement le CDM Widevine — récupéré à l’exécution, exactement de la même façon qu’un Chrome standard le reçoit.
Pourquoi il faut l’activer explicitement
Clearcote embarque la plomberie EME/Widevine, compilée dans le binaire (enable_widevine), mais pas le CDM propriétaire de Google, que Clearcote ne redistribue pas — et qui ne pourrait pas être livré dans le build open source. Sans CDM, navigator.requestMediaKeySystemAccess('com.widevine.alpha') est rejeté : c’est à la fois un problème de DRM cassé et un indice d’incohérence (un vrai Chrome le résout). C’est donc vous qui déclenchez le téléchargement — Clearcote ne distribue jamais le CDM.
L’activer
Passez widevine. Le SDK télécharge le CDM une seule fois depuis le serveur de composants de Google, vérifie son SHA-256, l’installe dans le profil et l’active — les pages DRM peuvent alors être lues. Cela fonctionne avec launch_persistent_context et, depuis le SDK 0.23, avec launch() en Python, qui s’exécute désormais sur un profil jetable plutôt qu’en mode incognito. En Node, utilisez launchPersistentContext (le type TypeScript de launch() ne déclare pas encore widevine). Python & Node ; le SDK .NET n’a pas encore d’option 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 });Fonctionnement & limites
- Activation volontaire, déclenchée par l’utilisateur — le CDM est téléchargé une seule fois depuis le serveur de composants de Google, vérifié par SHA-256 (un hash manquant est refusé — il s’agit d’une DLL native), puis mis en cache sous
~/.clearcote/WidevineCdm(déplacez-le avecCLEARCOTE_WIDEVINE_DIR). Pré-téléchargez-le avecfetch_widevine()/fetchWidevine(). Chaque lancement avecwidevineeffectue aussi une vérification de version auprès du serveur de mises à jour de Google, directement depuis cette machine et non via votre proxy. - Un profil est nécessaire — le CDM réside dans le profil ; cela fonctionne donc avec le
launch()synchrone etlaunch_persistent_context, mais pas avec les lancements en mode incognito (ephemeral_profile=False, lelaunch()asynchrone). Le SDK réactive le component updater (et, sous Windows, force une recherche rapide de mises à jour) pour que le moteur enregistre le CDM. Fonctionne sous Windows et Linux. - Docker — l’image officielle l’active par défaut pour une persona Windows (
CC_WIDEVINE=0pour le désactiver). - Lecture en sécurité logicielle (L3) ; la sécurité matérielle (L1) est hors périmètre.
- Best-effort — si le CDM ne peut pas être récupéré ou si la vérification de version échoue (hors ligne, par exemple), le lancement se poursuit sans DRM au lieu d’échouer.
La prise en charge des DRM est une pièce de plus d’une identité cohérente : un vrai Chrome répond à la requête Widevine, donc une persona qui en est incapable se trahit — et la persona par défaut se présente comme Google Chrome, qui livre le CDM sur toutes les plateformes desktop. Voir Comment fonctionne la détection.