Widevine CDM implementation in pure TypeScript
npm install @li0ard/widevine
@li0ard/widevine
Simple Widevine CDM implementation
docs
``bashfrom NPM
npm i @li0ard/widevine
Example
`ts
import { CDM, PSSH, Device, DeviceType, KeyType } from "@li0ard/widevine";const device = Device.decode(
DeviceType.ANDROID,
Buffer.from("....", "base64"),
Buffer.from("....", "base64")
);
const cdm = new CDM(device);
const sessionId = cdm.open();
const pssh = PSSH.decode(Buffer.from("....", "base64"));
const challenge = cdm.get_license_challenge(sessionId, pssh);
const license = await (await fetch(
https://cwip-shaka-proxy.appspot.com/no_auth, {
method: "POST",
body: challenge
})).arrayBuffer();for(const key of cdm.parse_license(sessionId, new Uint8Array(license)))
console.log(
- [${KeyType[key.type]}] ${bytesToHex(key.kid)}:${bytesToHex(key.key)});cdm.close(sessionId);
``- Widevine - Widevine (and Widevine icon) by Google
- pywidevine - An Open Source Python Implementation of Widevine CDM (greatly inspired)