Widevine — en DRM-teknik utvecklad av Google för att skydda videoinnehåll från obehörig kopiering på mobila enheter, Smart TV och webbplattformar. Kryptering av innehåll utförs via CDM-modulen, som stöds på 4 miljarder enheter världen över. Widevine-teknik säkerställer kompatibilitet med Android, iOS, Chrome och Smart TV, vilket gör att streamingtjänster kan skydda premiuminnehåll på alla plattformar.
Huvudpunkter
Widevine — en proprietär DRM-teknik som förvärvades av Google 2010 och blev de facto-standard för skydd av videoinnehåll i Android-ekosystemet. Den används av de största streamingtjänsterna, inklusive Netflix, Amazon Prime Video, Disney+ och Hulu, för att förhindra obehörig kopiering och spridning av innehåll.
Widevine stöder kryptering enligt AES-128 CBC-standarden med hjälp av innehållsnycklar som endast överförs till auktoriserade enheter via en säker licensieringskanal. Systemet ger end-to-end-skydd från krypteringsögonblicket på servern till avkodning på användarens enhet.
Företaget Widevine Technologies grundades 1999 och utvecklade ursprungligen lösningar för innehållsskydd på kabel-TV-plattformar. Efter förvärvet av Google 2010 anpassades tekniken för mobila plattformar och integrerades i operativsystemet Android från och med version 4.4 KitKat. Från 2015 blev Widevine en obligatorisk komponent i Google Mobile Services-certifiering.
2018 introducerade Google Widevine Modular DRM, som gjorde det möjligt för enhetstillverkare att implementera olika skyddsnivåer i hårdvara utan att ändra operativsystemets kod. Idag stöds Widevine Modular på över 4 miljarder enheter och är den huvudsakliga DRM-mekanismen på Android.
Widevines arkitektur består av tre nyckelkomponenter: Content Decryption Module (CDM), licensserver och verktyg för innehållskryptering. CDM utför dekryptering på klientsidan och samverkar med hårdvarans Trusted Execution Environment (TEE) för säker lagring av nycklar.
Googles licensserver hanterar utfärdandet av nycklar baserat på innehållsleverantörens policyer, som definierar tidsbegränsningar, antal enheter och uppspelningskvalitet. Krypteringsverktyget förbereder innehåll på leverantörens sida och paketerar det i MPEG-DASH- eller HLS-format med CENC-kryptering.
Skyddsprocessen börjar med paketeringsfasen, när mediafilen krypteras med innehållsnyckeln på leverantörens server. Den krypterade strömmen överförs till användarens enhet via CDN, där CDM begär en licens från licensservern.
Licensservern verifierar enhetens autenticitet och rätten att komma åt innehållet. Om verifieringen lyckas utfärdar servern en licens med nyckeln som CDM använder för dekryptering. Licensen kan innehålla begränsningar för visningstid och upplösning.
Licensutbyte i Widevine implementeras via EME-protokollet (Encrypted Media Extensions) i webbläsare eller via SDK på mobila plattformar. Licensbegäran genereras av CDM och skickas till licensservern via HTTPS, vilket säkerställer skydd mot avlyssning av nycklar under transport.
Servern bearbetar begäran och returnerar en licens som också är krypterad och endast kan dekrypteras av enhetens CDM. Hårdvarubindning av nyckeln till en specifik enhet förhindrar överföring till andra plattformar.
Widevine använder Common Encryption (CENC)-standarder definierade i ISO/IEC 23001-7, vilket säkerställer kompatibilitet med MPEG-DASH- och HLS-format. AES-128-kryptering i CTR- eller CBC-läge tillämpas för att skydda mediaströmmar.
För nyckelderivering används HKDF (HMAC-based Key Derivation Function), vilket möjliggör generering av unika nycklar för varje segment av innehåll. HLS-stöd i Widevine lades till från version Modular 2.0, vilket utökade kompatibiliteten med Apple-plattformar.
@Throws
fun requestLicense(): ByteArray {
val drmSessionManager = mediaDrm.createSession(
sessionId,
List("keyRequestType", "init")
)
val request = mediaDrm.getKeyRequest(
sessionId,
schemeData.get("mimeType"),
KeyType.STREAMING,
mutableMapOf()
)
return licenseService.acquire(request.data)
}
Widevine definierar tre säkerhetsnivåer som skiljer sig åt i hur kryptografiska operationer utförs och innehåll bearbetas. Nivå L1 ger maximalt skydd, L3 — minimalt, L2 intar en mellanposition.
| Nivå | Typ av skydd | Enhetskrav | Maximal upplösning |
|---|---|---|---|
| L1 | Hårdvara | TEE på SoC-nivå | 4K Ultra HD |
| L2 | Hybrid | TEE för nycklar, programvara för video | 1080p |
| L3 | Programvara | Endast programvaru-CDM | 720p |
Nivå L1 kräver närvaro av Trusted Execution Environment (TEE) på hårdvarunivå, där alla kryptografiska operationer utförs. Innehållsnycklar lämnar aldrig TEE, vilket utesluter att de kan extraheras även om det primära operativsystemet komprometteras.
Enheter med L1-certifiering kan spela upp innehåll i 4K-kvalitet och HDR, eftersom den dekrypterade videoströmmen skickas direkt till den skyddade videoutgången utan åtkomst från användarprocesser.
Nivå L3 utför alla kryptografiska operationer i programvara i det vanliga användarutrymmet. Detta är det minst säkra läget, där nycklar kan extraheras från enhetens RAM-minne.
Widevine L3 begränsar uppspelningskvaliteten till 720p, vilket gör det lämpligt för visning på enheter på instegsnivå eller stationära webbläsare utan hårdvaruskydd.
fun getSecurityLevel(): String {
val mediaDrm = MediaDrm(UUID.fromString(
"edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
))
val level = mediaDrm.getPropertyString(
"securityLevel"
)
return level.ifEmpty { "L3" }
}
Integrering av Widevine i mobilappar sker via standard-API:er MediaDrm (Android) och AVContentKeySession (iOS). I de flesta fall behöver utvecklaren inte arbeta direkt med DRM — spelarbibliotek som ExoPlayer och AVPlayer hanterar licensiering automatiskt.
På Android integreras Widevine via klassen MediaDrm som ger direkt åtkomst till CDM. För streaming-appar rekommenderas att använda ExoPlayer med DrmSessionManager-modulen, som automatiskt hanterar licensbegäranden.
Vid initialisering av spelaren måste UUID för Widevine-schemat (`edef8ba9-79d6-4ace-a3c8-27dcd51d21ed`) och URL:en till licensservern som tillhandahålls av innehållsleverantören anges. ExoPlayer hanterar automatiskt cykeln för licensbegäran och förnyelse.
val drmLicenseUrl = "https://license.service.com/wv"
val mediaItem = MediaItem.Builder()
.setUri(Uri.parse(streamUrl))
.setDrmKeyRequestUrl(drmLicenseUrl)
.setDrmKeyRequestHeaders(
mapOf("Authorization" to token)
)
.build()
val exoPlayer = ExoPlayer.Builder(context)
.build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
På webbplattformar fungerar Widevine via Media Source Extensions (MSE) och Encrypted Media Extensions (EME). Webbläsare baserade på Chromium har inbyggt stöd för Widevine CDM, och utvecklaren behöver bara initiera en EME-session med rätt konfiguration.
För att arbeta med Widevine i en webbläsare måste licensinitieraren med keySystem-typ `com.widevine.alpha` anges. Efter att en MediaKeys-instans skapats hanterar webbläsaren automatiskt licensbegäranden.
Vid integrering av Widevine är det viktigt att korrekt hantera licensieringsfel som uppstår vid brist på åtkomsträttigheter, utgången prenumeration eller enhetsinkompatibilitet. Felet TYPE_EXPIRED_LICENSE kräver förnyelse av licensen via en ny begäran till servern, och TYPE_OUTPUT_NOT_ALLOWED indikerar inkompatibilitet mellan videoutgången och DRM-policyer.
Det rekommenderas att implementera en mekanism för återförsök med exponentiell fördröjning för tillfälliga nätverksfel och visa ett begripligt meddelande för användaren vid permanenta licensieringsavslag. Fel loggning av DRM-sessioner hjälper innehållsleverantörer att identifiera problem med enheter och optimera policyer.
Widevine konkurrerar med FairPlay från Apple och PlayReady från Microsoft, och utgör de tre huvudsakliga DRM-lösningarna på marknaden för mobila plattformar. Varje teknik har sina fördelar och begränsningar relaterade till plattformens ekosystem.
| Egenskap | Widevine | FairPlay | PlayReady |
|---|---|---|---|
| Utvecklare | Apple | Microsoft | |
| Huvudplattform | Android, Chrome | iOS, tvOS, Safari | Windows, Xbox, UWP |
| Maximal nivå | L1 (4K) | Motsvarande L1 (4K) | SL3000 (4K) |
| Hårdvaruskydd | TEE | Secure Enclave | TPM + TEE |
Valet av DRM beror på appens målplattformar. För Android-first-projekt är Widevine det naturliga valet eftersom det är förinstallerat på alla certifierade enheter med Google Mobile Services och inte kräver någon extra licensavgift.
För plattformsoberoende projekt används ofta en multi-DRM-metod med licensaggregatorer som Axinom, EZDRM och Vualto, som tillhandahåller ett enhetligt API för arbete med alla tre DRM-system. Detta minskar integrationskomplexiteten och centraliserar licenshanteringen.
Vanliga frågor
Widevine — en DRM-teknik från Google, utformad för att skydda digitalt videoinnehåll från obehörig kopiering. Den används av streamingtjänster för att kryptera video och hantera åtkomst till den via ett licenssystem.
Widevine stöder tre nivåer av säkerhet: L1 med hårdvarukryptering i TEE, L2 med hybridmetod och L3 med helt programvaruimplementering. L1 möjliggör uppspelning av innehåll i 4K, L3 är begränsad till 720p-kvalitet.
Widevine-nivån på Android kan kontrolleras via klassen MediaDrm genom att begära egenskapen securityLevel. För detta skapas en MediaDrm-instans med Widevines UUID och getPropertyString anropas, eller så används tredjepartsappar som DRM Info.
Widevine utvecklades av Google för Android och Chrome, medan FairPlay utvecklades för iOS, tvOS och Safari. Båda stöder hårdvarukryptering och 4K, men Widevine är mer utbrett på Android-enheter, medan FairPlay är de facto-standard i Apples ekosystem.
För att använda Widevine i en mobilapp krävs ingen separat licens — tekniken är inbyggd i certifierade Android-enheter och Chrome. Avgift tas endast ut från innehållsleverantörer för användning av licensservern.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också