Dodatečně k programu je pro zájemce k dispozici také API (Application Programming Interface) pro získávání Widevine L3 dešifrovacích klíčů. Jedná se o nové a velmi jednoduché API, které využívá i samotný DRM plugin.
API je k dispozici tak, jak je, zdarma a "bez limitů" (technické limity stále existují). Pokud se rozhodnete API jakkoli používat, prosím, chovejte se slušně.
Pro zaslání požadavku na API lze použít například program curl
, viz příklady níže. Požadavky lze samozřejmě také zasílat ze skriptu či kódu.
Řetězce URL
a OBSAH
nahraďte příslušnými hodnotami, viz sekce Funkce API.
curl -X POST -H "Content-Type:application/json" -d "OBSAH" URL
Pro některé verze curl
je potřeba navíc parametr --ssl-no-revoke
pro zakázání tzv. certificate revocation checks kvůli WinSSL. Lze to vyřešit i specifikováním CA bundle, ale to je mimo rozsah tohoto dokumentu.
curl --ssl-no-revoke -X POST -H "Content-Type:application/json" -d "OBSAH" URL
API nabízí jen dvě funkce, které slouží čistě k získání obsahu požadavku pro licenční server a následně k extrakci dešifrovacích klíčů z odpovědi z licenčního serveru. Samotný proces zaslání požadavku na licenční server je nutné provést odděleně.
/generate
Vygeneruje obsah požadavku pro licenční server na základě daného PSSH.
URL | https://wv.api.md.sune.app/v1/generate |
Obsah |
|
Odpověď |
|
/extract
Extrahuje dešifrovací klíče z dané odpovědi od licenčního serveru.
URL | https://wv.api.md.sune.app/v1/extract |
Obsah |
|
Odpověď |
Vrací pole objektů (
keys ), kde každý objekt reprezentuje jeden klíč.
|
V MPD souborech (DASH) se PSSH nachází v tagu ContentProtection
s schemeIdUri = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
. Tento tag by měl obsahovat další tag cenc:pssh
, jehož obsahem je právě hodnota PSSH, většinou kódovaná v Base64.
PSSH lze také najít přímo v programu. U vybraného zdroje stačí kliknout pravým tlačítkem myši, vybrat Informace o médiu a poté prozkoumat metadata > protection > [číslo]
. Toto lze najít jak u celého kontejneru, tak i u samotného videa či audia. Každopádně jsou důležité takové položky, které mají type = DRM_WIDEVINE
, scheme = cenc
, contentType = pssh
. Samotný obsah PSSH je v položce content
, na kterou stačí kliknout pravým tlačítkem myši a dát Zkopírovat hodnotu.
Video či audio lze dešifrovat například pomocí programu mp4decrypt
a to následovně:
mp4decrypt --show-progress --key KID:KEY "INPUT" "OUTPUT"
Kde řetězce KID
a KEY
nahraďte hodnotami získanými z API. INPUT
je cesta vstupního souboru, OUTPUT
je cesta výstupního souboru.
Pokud neznáte KID
, je nutné zkusit všechny klíče, dokud se to s některým nepodaří. Existuje samozřejmě lepší způsob, ale vyžaduje program ffmpeg
, init segment a jeden segment obsahu. Program právě toto dělá tehdy, když nezná KID, viz případně zdrojový kód DRM pluginu.
Obsah požadavku na licenční server by měl fungovat na většinu webů, například Česká televize, Nova Voyo, Prima+, JOJ Play. U některých jsou však potřeba ještě dodatečné parametry, jako je třeba konkrétní HTTP header. U vlastních modifikovaných licenčních serverů, jako má třeba Netflix, toto bohužel v takovéto podobě již nebude fungovat, tam je nutné obsah požadavku poupravit.
L3 dešifrovací klíče by měly fungovat pro jakýkoli obsah do kvality 1080p (Full HD). Pro obsah vyšší kvality klíče již fungovat nemusí, záleží však na licenčním serveru, zdali dešifrovací klíče pro takovýto obsah pošle.