Saltar al contenido

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 }, .NET Widevine = false) o CLEARCOTE_WIDEVINE=0.
  • Actívalo sin clave (el build abierto) con widevine=True o CLEARCOTE_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.
python
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=0
javascript
import { 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=0

Funcionamiento & 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 con CLEARCOTE_WIDEVINE_DIR). Los lanzamientos que se ejecutan al mismo tiempo comparten una sola descarga. Descárgalo por adelantado con fetch_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 con widevine lo pasa por ti, y desde 0.48.0 lo hace todo lanzamiento con licencia. Los builds más antiguos necesitan un perfil: widevine=True con el launch() 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 en args siempre tiene prioridad.
  • Python, Node y .NET (.NET desde 0.48.0: LaunchOptions.Widevine y la clase Widevine). Funciona en Windows y Linux.
  • Docker: la imagen oficial lo activa por defecto para una persona de Windows (CC_WIDEVINE=0 para 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.