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.
  • Lizenziert ab 154 r32 – die Engine akzeptiert --widevine-cdm-path, ein CDM-Verzeichnis, das sie beim Start in jedem Profil registriert, auch in den Wegwerfprofilen von Playwright, ohne auf den Component-Updater zu warten. Ab SDK 0.41.0 übergibt ein widevine-Start den Switch für Sie und verweist dabei auf das CDM, das er geholt hat (das SDK prüft zuerst, ob die Engine den Switch kennt; ältere Builds behalten also den oben beschriebenen Weg über das Profil). Die Option widevine wird weiterhin nur von den Starts mit Profil angenommen. Für jeden anderen Start auf einem solchen Build (die Inkognito-Starts, serve()) fügen Sie --widevine-cdm-path=<dir> selbst zu args hinzu, mit dem Verzeichnis, das fetch_widevine() / fetchWidevine() zurückgibt.
  • 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.