Widevine / EME (DRM)
Reproduce video protegido con DRM, y haz que la superficie EME coincida con la de un Chrome real, con el CDM de Widevine, que se descarga en tiempo de ejecución exactamente como lo recibe un Chrome estándar. Desde el SDK 0.48.0 está activado por defecto en los lanzamientos con licencia.
Por qué lo descarga el SDK
Clearcote trae compilada la infraestructura de EME/Widevine (enable_widevine), pero no el CDM propietario de Google, que Clearcote no redistribuye y que tampoco podría incluirse en el build open source. Sin un CDM, navigator.requestMediaKeySystemAccess('com.widevine.alpha') se rechaza, lo que es a la vez un problema de DRM roto y una señal delatora de coherencia (en un Chrome real se resuelve). Por eso el SDK descarga el CDM en tu máquina, desde el propio servidor de componentes de Google; Clearcote nunca lo distribuye.
Activado por defecto en los lanzamientos con licencia
Cuando se encuentra una clave de licencia (la opción license_key, CLEARCOTE_LICENSE_KEY o ~/.clearcote/license.key) y el navegador es el build con licencia 154 r32 o posterior, cada lanzamiento local activa Widevine: launch(), los contextos persistentes, serve(), la API asíncrona de Python y los lanzamientos de .NET. No hay que pasar nada. El primer lanzamiento descarga el CDM; los siguientes usan al instante la copia en caché.
- Desactívalo con
widevine=False(Node{ widevine: false }, .NETWidevine = false) oCLEARCOTE_WIDEVINE=0. - Actívalo sin clave (el build abierto) con
widevine=TrueoCLEARCOTE_WIDEVINE=1. Un lanzamiento sin clave sigue sin Widevine a menos que lo pidas, como antes. - No detiene ningún lanzamiento. Por defecto espera como máximo 15 segundos al CDM (
CLEARCOTE_WIDEVINE_TIMEOUT_SECONDS); si no se puede cargar, el navegador arranca sin él y el SDK avisa una vez.
from clearcote import launch
browser = launch() # licence key found: Widevine is on
page = browser.new_page()
page.goto("https://your-drm-site.example")
# navigator.requestMediaKeySystemAccess('com.widevine.alpha') resolves
plain = launch(widevine=False) # or CLEARCOTE_WIDEVINE=0import { launch, fetchWidevine } from "clearcote";
// optional: pre-fetch the CDM ahead of time (cached under ~/.clearcote/WidevineCdm)
await fetchWidevine();
const browser = await launch(); // licence key found: Widevine is on
const plain = await launch({ widevine: false }); // or CLEARCOTE_WIDEVINE=0Funcionamiento & límites
- Se descarga una vez y queda en caché. El CDM se descarga desde el servidor de componentes de Google, se verifica con SHA-256 (si falta el hash, se rechaza: es una biblioteca nativa) y se guarda en caché en
~/.clearcote/WidevineCdm(puedes moverlo conCLEARCOTE_WIDEVINE_DIR). Los lanzamientos que se ejecutan al mismo tiempo comparten una sola descarga. Descárgalo por adelantado confetch_widevine()/fetchWidevine(). - Una comprobación de versión al día. Un CDM en caché comprobado en las últimas 24 horas se usa sin ninguna conexión de red; pasado ese tiempo, se hace una comprobación de versión contra el servidor de actualizaciones de Google, directamente desde esta máquina y no a través de tu proxy. Sin conexión, se usa el CDM en caché.
- Build con licencia 154 r32 y posteriores: el motor acepta
--widevine-cdm-path, un directorio de CDM que registra al arrancar en todos los perfiles, incluidos los de incógnito y los desechables de Playwright. Desde el SDK 0.41.0, un lanzamiento conwidevinelo pasa por ti, y desde 0.48.0 lo hace todo lanzamiento con licencia. Los builds más antiguos necesitan un perfil:widevine=Truecon ellaunch()síncrono o un contexto persistente instala el CDM en él y deja que el component updater lo registre. Un--widevine-cdm-path=<dir>propio enargssiempre tiene prioridad. - Python, Node y .NET (.NET desde 0.48.0:
LaunchOptions.Wideviney la claseWidevine). Funciona en Windows y Linux. - Docker: la imagen oficial lo activa por defecto para una persona de Windows (
CC_WIDEVINE=0para desactivarlo). Los navegadores alojados traen el suyo. - Reproducción Software-secure (L3); Hardware-secure (L1) queda fuera del alcance.
El soporte de DRM es una pieza más de una identidad coherente: un Chrome real responde a la consulta de Widevine, así que una persona que no puede hacerlo se delata; y la persona por defecto se presenta como Google Chrome, que incluye el CDM en todas las plataformas de escritorio. Consulta Cómo funciona la detección.