DRM Widevine para Chromium automatizado
Builds open source do Chromium vêm sem o CDM do Widevine, então vídeo com DRM falha e requestMediaKeySystemAccess('com.widevine.alpha') é rejeitado, enquanto um Chrome desktop de fábrica normalmente o resolve. Passe widevine no launch e o SDK baixa o CDM do servidor de componentes do Google, confere e ativa.
Em todos os planos, opcional.
Uma opção de launch
from clearcote import launch_persistent_context
ctx = launch_persistent_context("./profile-drm", widevine=True) # fetch, verify, enable
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://your-drm-site.example")
# navigator.requestMediaKeySystemAccess('com.widevine.alpha') now resolvesDestaques
Baixado do jeito que o Chrome recebe
O CDM vem do próprio servidor de componentes do Google, do jeito que o Chrome de fábrica o recebe, e é baixado uma vez por versão. O Clearcote nunca o distribui.
Verificado antes do uso
O download é conferido por SHA-256, e um hash ausente é recusado de cara, porque o CDM é uma biblioteca nativa.
Em cache e reutilizável
Fica guardado em ~/.clearcote/WidevineCdm, então é baixado uma vez por versão. Baixe com antecedência com fetchWidevine() para tirar o download do seu primeiro launch; cada launch ainda faz uma verificação rápida de versão com o Google, direto desta máquina.
Uma resposta de EME coerente
Um Chrome real resolve a consulta de key system do Widevine. Com o CDM instalado, o Clearcote também.
Falha sem quebrar
Se não der para baixar o CDM, o launch segue sem DRM em vez de falhar.
Reprodução L3
Reprodução com segurança por software (L3). O L1, com segurança por hardware, está fora do escopo.
Por que é opcional
O CDM do Google é um binário fechado. Ele não pode fazer parte do build aberto, que é open source, e o Clearcote também não o redistribui com o build licenciado. Por isso, o navegador vem com toda a infraestrutura de EME compilada, mas sem o CDM, e é você quem dispara o download.
O CDM fica no perfil. Em Python, ele funciona com launch_persistent_context e com launch(), que roda num perfil descartável (na API síncrona; o launch() assíncrono é anônimo, então use launch_persistent_context nesse caso); em Node, use launchPersistentContext. O launch anônimo (ephemeral_profile=False) não aceita o CDM. O SDK reativa o component updater e, no Windows, força uma verificação rápida de atualizações, para que o motor registre o CDM.
Isso também importa além do vídeo. Se o key system do Widevine resolve ou não é mais uma coisa que uma página pode ler, e um Chrome que não sabe responder não parece Chrome.
Para que as pessoas usam
QA de streaming
Teste reprodução, direitos de acesso e a UI do player no seu próprio catálogo protegido por DRM.
Monitoramento de mídia
Verificações automatizadas em páginas que reproduzem vídeo protegido.
Uma persona Chrome completa
Mantenha a resposta de EME consistente com a de um Chrome real, mesmo quando você nunca reproduz um vídeo.
O Clearcote foi feito para privacidade, testes, pesquisa e automação lícita. Você é responsável pela forma como o usa e por seguir os termos dos sites que visita.
Qual plano inclui
Em todos os planos, opcional, com reprodução com segurança por software (L3).
Comparar planosPerguntas frequentes
Como ativo o Widevine no Playwright?
Inicie pelo SDK do Clearcote e passe widevine=True (Python: o launch() síncrono ou um contexto persistente) ou widevine: true (Node, launchPersistentContext). Ele baixa o CDM uma vez, verifica, coloca no perfil e ativa. O SDK .NET ainda não tem opção de Widevine.
Por que o Chromium open source não reproduz vídeo com DRM?
O CDM do Widevine é proprietário e não pode ser distribuído num build open source, então, sem ele, tanto a reprodução com DRM quanto a consulta de key system do EME falham.
O Clearcote inclui o CDM?
Não. O CDM é baixado do servidor de componentes do Google quando você ativa a opção, do mesmo jeito que o Chrome de fábrica o recebe. O Clearcote nunca o distribui.
Qual nível de segurança é suportado?
L3, com segurança por software. O L1, com segurança por hardware, que alguns serviços exigem para resoluções altas, está fora do escopo.
Preciso de um perfil persistente?
Precisa de um perfil, mas não necessariamente de um que seja mantido. O CDM é instalado no perfil, então, em Python, o perfil descartável por trás do launch() síncrono funciona tão bem quanto o launch_persistent_context (o launch() assíncrono é anônimo); em Node, use launchPersistentContext. Só o launch anônimo (ephemeral_profile=False) não aceita o CDM.
Vá mais fundo na documentação
Recursos relacionados
Carregue extensões descompactadas Manifest V2 e V3 na inicialização, em headed ou headless, no Windows e no Linux.
Um Chromium drop-in para Playwright e Puppeteer: basta trocar um import em Python, Node ou .NET, e o navegador é baixado e verificado por SHA-256 para você.
Canvas, WebGL, WebGPU, áudio, fontes, tela e hardware derivados no motor C++ a partir de um único seed, com locale e fuso horário ajustados para combinar, para que todas as superfícies concordem entre si.
Um seed por conta: o mesmo dispositivo a cada sessão, um diferente para a próxima conta, com cookies e armazenamento que persistem entre execuções.
Leituras relacionadas
Experimente o Clearcote
Plug-and-play no Playwright e no Puppeteer, coerente até o handshake TLS, com um build de código aberto para começar.
Grátis para um navegador com GitHub. Sem cartão.