Widevine / EME (DRM)
Reproduza vídeo protegido por DRM, e tenha a mesma superfície EME de um Chrome real, com o CDM do Widevine, baixado em tempo de execução exatamente como um Chrome padrão o recebe. Desde o SDK 0.48.0, ele vem ativado por padrão nas inicializações licenciadas.
Por que o SDK o baixa
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 ser incluído no build open source. Sem um CDM, navigator.requestMediaKeySystemAccess('com.widevine.alpha') é rejeitado, o que é ao mesmo tempo um problema de DRM quebrado e um indício de incoerência (um Chrome real resolve essa chamada). Por isso o SDK baixa o CDM na sua máquina, do próprio servidor de componentes do Google; o Clearcote nunca o distribui.
Ativado por padrão nas inicializações licenciadas
Quando uma chave de licença é encontrada (a opção license_key, CLEARCOTE_LICENSE_KEY ou ~/.clearcote/license.key) e o navegador é o licenciado 154 r32 ou mais recente, toda inicialização local ativa o Widevine: launch(), contextos persistentes, serve(), a API assíncrona do Python e as inicializações do .NET. Não é preciso passar nada. A primeira inicialização baixa o CDM; as seguintes usam a cópia em cache na hora.
- Desative-o com
widevine=False(Node{ widevine: false }, .NETWidevine = false) ouCLEARCOTE_WIDEVINE=0. - Ative-o sem chave (o build aberto) com
widevine=TrueouCLEARCOTE_WIDEVINE=1. Uma inicialização sem chave continua sem Widevine, a menos que você peça, como antes. - Nunca impede uma inicialização. O padrão espera no máximo 15 segundos pelo CDM (
CLEARCOTE_WIDEVINE_TIMEOUT_SECONDS); se ele não puder ser carregado, o navegador inicia sem ele e o SDK avisa uma 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=0Como funciona e limites
- Baixado uma vez, em cache. O CDM é baixado do servidor de componentes do Google, verificado por SHA-256 (um hash ausente é recusado: é uma biblioteca nativa) e guardado em cache em
~/.clearcote/WidevineCdm(mude o local comCLEARCOTE_WIDEVINE_DIR). Inicializações que rodam ao mesmo tempo compartilham um único download. Baixe antecipadamente comfetch_widevine()/fetchWidevine(). - Uma verificação de versão por dia. Um CDM em cache verificado nas últimas 24 horas é usado sem nenhum acesso à rede; depois disso, uma verificação de versão vai para o servidor de atualização do Google, diretamente desta máquina, e não pelo seu proxy. Sem conexão, o CDM em cache é usado.
- Licenciado 154 r32 e mais recentes: o motor aceita
--widevine-cdm-path, um diretório de CDM que ele registra na inicialização em todos os perfis, incluindo os anônimos e os descartáveis do Playwright. A partir do SDK 0.41.0, uma inicialização comwidevineo passa para você, e a partir do 0.48.0 toda inicialização licenciada faz isso. Builds mais antigos precisam de um perfil:widevine=Truecom olaunch()síncrono ou um contexto persistente coloca o CDM nele e deixa o atualizador de componentes registrá-lo. Um--widevine-cdm-path=<dir>seu emargssempre prevalece. - Python, Node e .NET (.NET desde o 0.48.0:
LaunchOptions.Widevinee a classeWidevine). Funciona no Windows e no Linux. - Docker: a imagem oficial o ativa por padrão para uma persona Windows (
CC_WIDEVINE=0para desativar). Os navegadores hospedados trazem o seu próprio. - Reprodução com segurança por software (L3); a segurança por hardware (L1) está fora do escopo.
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.