Zum Inhalt springen

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 }, .NET Widevine = false) oder CLEARCOTE_WIDEVINE=0.
  • Ohne Schlüssel einschalten (offener Build) mit widevine=True oder CLEARCOTE_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.
python
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=0
javascript
import { 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=0

Funktionsweise & 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/WidevineCdm zwischengespeichert (verschieben lässt sich das mit CLEARCOTE_WIDEVINE_DIR). Gleichzeitig laufende Starts teilen sich einen Download. Vorab laden können Sie es mit fetch_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 ein widevine-Start den Switch für Sie, ab 0.48.0 jeder lizenzierte Start. Ältere Builds brauchen ein Profil: widevine=True mit dem synchronen launch() oder einem persistenten Kontext hinterlegt das CDM darin und lässt es vom Component-Updater registrieren. Ein eigenes --widevine-cdm-path=<dir> in args hat immer Vorrang.
  • Python, Node und .NET (.NET seit 0.48.0: LaunchOptions.Widevine und die Klasse Widevine). 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.