Widevine / EME (DRM)
Spielen Sie DRM-geschützte Videos ab und bilden Sie die EME-Oberfläche eines echten Chrome nach, mit dem Widevine-CDM, das zur Laufzeit genau so geladen wird, wie ein Standard-Chrome es erhält. Seit SDK 0.48.0 ist es bei lizenzierten Starts standardmäßig aktiv.
Warum das SDK es holt
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 holt das SDK das CDM auf Ihrem Rechner, von Googles eigenem Component-Server; Clearcote verbreitet es nie selbst.
Bei lizenzierten Starts standardmäßig aktiv
Wird ein Lizenzschlüssel gefunden (die Option license_key, CLEARCOTE_LICENSE_KEY oder ~/.clearcote/license.key) und ist der Browser lizenziert ab 154 r32, schaltet jeder lokale Start Widevine ein: launch(), persistente Kontexte, serve(), die asynchrone Python-API und die .NET-Starts. Sie müssen nichts übergeben. Der erste Start lädt das CDM herunter; spätere Starts nutzen sofort die zwischengespeicherte Kopie.
- Abschalten mit
widevine=False(Node{ widevine: false }, .NETWidevine = false) oderCLEARCOTE_WIDEVINE=0. - Ohne Schlüssel einschalten (offener Build) mit
widevine=TrueoderCLEARCOTE_WIDEVINE=1. Ein Start ohne Schlüssel bleibt wie bisher ohne Widevine, solange Sie es nicht anfordern. - Hält nie einen Start auf. Standardmäßig wird höchstens 15 Sekunden auf das CDM gewartet (
CLEARCOTE_WIDEVINE_TIMEOUT_SECONDS); lässt es sich nicht laden, startet der Browser ohne es, und das SDK warnt einmal.
from clearcote import launch
browser = launch() # licence key found: Widevine is on
page = browser.new_page()
page.goto("https://your-drm-site.example")
# navigator.requestMediaKeySystemAccess('com.widevine.alpha') resolves
plain = launch(widevine=False) # or CLEARCOTE_WIDEVINE=0import { launch, fetchWidevine } from "clearcote";
// optional: pre-fetch the CDM ahead of time (cached under ~/.clearcote/WidevineCdm)
await fetchWidevine();
const browser = await launch(); // licence key found: Widevine is on
const plain = await launch({ widevine: false }); // or CLEARCOTE_WIDEVINE=0Funktionsweise & Grenzen
- Einmal geholt, zwischengespeichert. Das CDM wird von Googles Component-Server heruntergeladen, per SHA-256 verifiziert (fehlt der Hash, wird es abgelehnt: es ist eine native Bibliothek) und unter
~/.clearcote/WidevineCdmzwischengespeichert (verschieben lässt sich das mitCLEARCOTE_WIDEVINE_DIR). Gleichzeitig laufende Starts teilen sich einen Download. Vorab laden können Sie es mitfetch_widevine()/fetchWidevine(). - Eine Versionsprüfung pro Tag. Ein zwischengespeichertes CDM, das in den letzten 24 Stunden geprüft wurde, wird ganz ohne Netzwerk genutzt; danach geht eine Versionsabfrage an Googles Update-Server, direkt von diesem Rechner aus, nicht über Ihren Proxy. Offline wird das zwischengespeicherte CDM genutzt.
- Lizenziert ab 154 r32: Die Engine akzeptiert
--widevine-cdm-path, ein CDM-Verzeichnis, das sie beim Start in jedem Profil registriert, auch in Inkognito- und den Wegwerfprofilen von Playwright. Ab SDK 0.41.0 übergibt einwidevine-Start den Switch für Sie, ab 0.48.0 jeder lizenzierte Start. Ältere Builds brauchen ein Profil:widevine=Truemit dem synchronenlaunch()oder einem persistenten Kontext hinterlegt das CDM darin und lässt es vom Component-Updater registrieren. Ein eigenes--widevine-cdm-path=<dir>inargshat immer Vorrang. - Python, Node und .NET (.NET seit 0.48.0:
LaunchOptions.Widevineund die KlasseWidevine). Funktioniert unter Windows und Linux. - Docker: Das offizielle Image aktiviert es für eine Windows-Persona standardmäßig (abschalten mit
CC_WIDEVINE=0). Gehostete Browser bringen ihr eigenes mit. - Wiedergabe mit Software-Sicherheit (L3); Hardware-Sicherheit (L1) wird nicht abgedeckt.
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.