Pular para o conteúdo
Mídia · EME · Widevine L3

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 resolves

Destaques

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 planos

Perguntas 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

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.