Saltar al contenido

Widevine / EME (DRM)

Reproduce video protegido con DRM (y haz que la superficie EME coincida con la de un Chrome real) activando el CDM de Widevine, que se descarga en tiempo de ejecución exactamente como lo recibe un Chrome estándar.

Por qué es opcional

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 eres tú quien inicia la descarga: Clearcote nunca distribuye el CDM.

Actívalo

Pasa widevine. El SDK descarga el CDM una vez desde el servidor de componentes de Google, verifica su SHA-256, lo instala en el perfil y lo activa; a partir de ahí, las páginas con DRM se reproducen. Funciona con launch_persistent_context y, desde el SDK 0.23, con launch() de Python, que ahora se ejecuta sobre un perfil desechable en lugar de en modo incógnito. En Node, usa launchPersistentContext (el tipo de TypeScript de launch() todavía no declara widevine). Disponible para Python & Node; el SDK de .NET todavía no tiene opción de 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 });

Funcionamiento & límites

  • Opcional y activado por el usuario: el CDM se descarga una vez desde el servidor de componentes de Google, se verifica con SHA-256 (si falta el hash, se rechaza: es una DLL nativa) y se guarda en caché en ~/.clearcote/WidevineCdm (puedes moverlo con CLEARCOTE_WIDEVINE_DIR). Descárgalo por adelantado con fetch_widevine() / fetchWidevine(). Cada lanzamiento con widevine también 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.
  • Se necesita un perfil: el CDM vive en el perfil, así que funciona con el launch() síncrono y con launch_persistent_context, pero no con los lanzamientos en incógnito (ephemeral_profile=False, el launch() asíncrono). El SDK vuelve a habilitar el component updater (y, en Windows, fuerza un escaneo de actualización rápida) para que el motor registre el CDM. Funciona en Windows y Linux.
  • Docker: la imagen oficial lo activa por defecto para una persona de Windows (CC_WIDEVINE=0 para desactivarlo).
  • Reproducción Software-secure (L3); Hardware-secure (L1) queda fuera del alcance.
  • Best-effort: si no se puede descargar el CDM o falla la comprobación de versión (por ejemplo, sin conexión), el lanzamiento continúa sin DRM en lugar de fallar.
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.