Pular para o conteúdo

Widevine / EME (DRM)

Reproduza vídeo protegido por DRM (e tenha a mesma superfície EME de um Chrome real) ativando o CDM do Widevine, baixado em tempo de execução exatamente do jeito que um Chrome padrão o recebe.

Por que é opt-in

O Clearcote vem com a infraestrutura de EME/Widevine compilada (enable_widevine), mas não com o CDM proprietário do Google, que o Clearcote não redistribui — e que não poderia fazer parte do build de código aberto. Sem um CDM, a chamada navigator.requestMediaKeySystemAccess('com.widevine.alpha') é rejeitada, o que é ao mesmo tempo um problema de DRM quebrado e um indício de incoerência (um Chrome real a resolve). Por isso é você quem dispara o download — o Clearcote nunca distribui o CDM.

Como ativar

Passe widevine. O SDK baixa o CDM uma única vez do próprio servidor de componentes do Google, verifica o SHA-256, instala-o no perfil e o ativa — e as páginas com DRM passam a tocar. Funciona com launch_persistent_context e, desde o SDK 0.23, com o launch() do Python, que agora roda num perfil descartável em vez do modo anônimo. No Node, use launchPersistentContext (o tipo TypeScript de launch() ainda não declara widevine). Python & Node; o SDK .NET ainda não tem opção 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 });

Como funciona & limites

  • Opt-in, disparado pelo usuário — o CDM é baixado uma única vez do servidor de componentes do Google, tem o SHA-256 verificado (um hash ausente é recusado — é uma DLL nativa) e fica em cache em ~/.clearcote/WidevineCdm (mude o local com CLEARCOTE_WIDEVINE_DIR). Faça o download antecipado com fetch_widevine() / fetchWidevine(). Cada inicialização com widevine também faz uma verificação de versão no servidor de atualização do Google, direto desta máquina, e não pelo seu proxy.
  • É preciso um perfil — o CDM fica no perfil, então funciona com o launch() síncrono e com launch_persistent_context, mas não com as inicializações em modo anônimo (ephemeral_profile=False, o launch() assíncrono). O SDK reativa o atualizador de componentes (e, no Windows, força uma varredura de atualização rápida) para que o motor registre o CDM. Funciona no Windows e no Linux.
  • Docker — a imagem oficial o ativa por padrão para uma persona Windows (CC_WIDEVINE=0 para desativar).
  • Reprodução com segurança por software (L3); a segurança por hardware (L1) está fora do escopo.
  • Melhor esforço — se não for possível baixar o CDM ou se a verificação de versão falhar (sem conexão, por exemplo), a inicialização segue sem DRM em vez de falhar.
O suporte a DRM é mais uma peça de uma identidade coerente: um Chrome real responde à consulta do Widevine, então uma persona que não consegue responder é um indício — e a persona padrão se apresenta como Google Chrome, que traz o CDM em todas as plataformas desktop. Veja Como a detecção funciona.