Widevine APIMedia Downloader » Dokumentace

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ě.

Jak API používat?

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.

Linux / MacOS

curl -X POST -H "Content-Type:application/json" -d "OBSAH" URL

Windows

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

Funkce API

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
{
    "pssh": "PSSH"
}
  • PSSH - PSSH jako Base64 kódovaný textový řetězec.
Odpověď
{
    "id": "ID",
    "request": "REQUEST"
}
  • ID - Interní identifikátor, který je použit pro následnou extrakci dešifrovacích klíčů. Tento identifikátor vyprchá za 5 minut, kdy je poté nutné provést stejný požadavek znovu.
  • REQUEST - Požadavek, který se má poslat na licenční server, jako Base64 kódovaný textový řetězec. Řetězec je většinou nutné před zasláním dekódovat, některé licenční servery ale mohou přijímat i takto kódovaný řetězec.

/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
{
    "id": "ID",
    "response": "RESPONSE"
}
  • ID - Interní identifikátor získaný v odpovědi na /generate požadavek.
  • RESPONSE - Odpověď od licenčního serveru jako Base64 kódovaný textový řetězec.
Odpověď
{
    "keys": [
        {
            "type": "TYPE",
            "kid": "KID",
            "key": "KEY"
        },
        ...
    ]
}
Vrací pole objektů (keys), kde každý objekt reprezentuje jeden klíč.
  • TYPE - Typ klíče, buď SIGNING, nebo CONTENT. Pro dešifrování obsahu je důležitý klíč typu CONTENT.
  • KID - Identifikátor klíče. Někdy se v manifestech či playlistech objevuje i zmínka o identifikátoru klíče, který byl použit. V programu jej lze najít pod položkou keyId, kde, pokud takovýto identifikátor nebyl nalezen, je hodnota null.
  • KEY - Hodnota klíče. Toto je společně s KID použito pro dešifrování.

Kde najít PSSH?

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.

Jak obsah dešifrovat?

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.

U čeho to funguje?

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.