Zum Inhalt springen

Widevine / EME (DRM)

Spielen Sie DRM-geschützte Videos ab (und bilden Sie die EME-Oberfläche eines echten Chrome nach), indem Sie das Widevine-CDM per Opt-in aktivieren – es wird zur Laufzeit genau so geladen, wie ein Standard-Chrome es erhält.

Warum es ein Opt-in ist

Clearcote liefert die EME/Widevine-Infrastruktur einkompiliert mit (enable_widevine), aber nicht Googles proprietäres CDM, das Clearcote nicht weiterverbreitet – und das im Open-Source-Build auch gar nicht ausgeliefert werden könnte. Ohne CDM schlägt navigator.requestMediaKeySystemAccess('com.widevine.alpha') fehl; das ist sowohl ein Problem für die DRM-Wiedergabe als auch ein Kohärenz-Indiz (in einem echten Chrome gelingt der Aufruf). Deshalb stoßen Sie den Download an – Clearcote verbreitet das CDM nie selbst.

Aktivieren

Übergeben Sie widevine. Das SDK lädt das CDM einmalig von Googles eigenem Component-Server herunter, prüft seinen SHA-256-Hash, hinterlegt es im Profil und aktiviert es – danach spielen DRM-Seiten ab. Das funktioniert mit launch_persistent_context und seit SDK 0.23 auch mit Pythons launch(), das inzwischen mit einem Wegwerfprofil statt im Inkognito-Modus läuft. In Node verwenden Sie launchPersistentContext (der TypeScript-Typ von launch() deklariert widevine noch nicht). Python & Node; das .NET-SDK hat noch keine Widevine-Option.

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 });

Funktionsweise & Grenzen

  • Opt-in, vom Nutzer ausgelöst – das CDM wird einmalig von Googles Component-Server heruntergeladen, per SHA-256 verifiziert (fehlt der Hash, wird es abgelehnt – es ist eine native DLL) und unter ~/.clearcote/WidevineCdm zwischengespeichert (verschieben lässt sich das mit CLEARCOTE_WIDEVINE_DIR). Vorab laden können Sie es mit fetch_widevine() / fetchWidevine(). Jeder Start mit widevine fragt außerdem einmal die Version bei Googles Update-Server ab, und zwar direkt von diesem Rechner aus, nicht über Ihren Proxy.
  • Ein Profil ist Pflicht – das CDM liegt im Profil, daher funktioniert es mit dem synchronen launch() und launch_persistent_context, aber nicht mit den Inkognito-Starts (ephemeral_profile=False, dem asynchronen launch()). Das SDK hebt die Unterdrückung des Component-Updaters auf (und erzwingt unter Windows einen Schnell-Update-Scan), damit die Engine das CDM registriert. Funktioniert unter Windows und Linux.
  • Docker – das offizielle Image aktiviert es für eine Windows-Persona standardmäßig (abschalten mit CC_WIDEVINE=0).
  • Wiedergabe mit Software-Sicherheit (L3); Hardware-Sicherheit (L1) wird nicht abgedeckt.
  • Best-Effort – lässt sich das CDM nicht laden oder schlägt die Versionsprüfung fehl (etwa offline), läuft der Start ohne DRM weiter, statt abzubrechen.
DRM-Unterstützung ist ein weiterer Baustein einer kohärenten Identität: Ein echtes Chrome beantwortet die Widevine-Abfrage, eine Persona, die das nicht kann, verrät sich also – und die Standard-Persona gibt sich als Google Chrome aus, das das CDM auf jeder Desktop-Plattform mitbringt. Siehe Wie Erkennung funktioniert.