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.
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 resolvesimport { 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/WidevineCdmzwischengespeichert (verschieben lässt sich das mitCLEARCOTE_WIDEVINE_DIR). Vorab laden können Sie es mitfetch_widevine()/fetchWidevine(). Jeder Start mitwidevinefragt 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()undlaunch_persistent_context, aber nicht mit den Inkognito-Starts (ephemeral_profile=False, dem asynchronenlaunch()). 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 einwidevine-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 Optionwidevinewird 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 zuargshinzu, mit dem Verzeichnis, dasfetch_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.