DRM (Digital Rights Management) — soubor technologií ochrany digitálního obsahu proti neoprávněnému kopírování a šíření. V mobilních aplikacích se DRM používá k šifrování videa, zvuku a elektronických knih, čímž je zajištěno dodržování licenčních smluv mezi vlastníky práv a spotřebiteli. Podle Google Widevine Documentation, 2026 je DRM integrováno do většiny streamovacích služeb — Netflix, Spotify, Apple TV+ — a je povinné pro legální distribuci prémiového obsahu.
Nejdůležitější
DRM — je soubor kryptografických a softwarových metod, které kontrolují přístup k digitálnímu obsahu. Na rozdíl od jednoduchého šifrování zahrnuje DRM licenční systém: obsah je zašifrován a k jeho zobrazení je vyžadován klíč, který je vydán až po ověření práv uživatele.
Hlavním úkolem DRM je prevence pirátství a zajištění dodržování regionálních omezení. Bez DRM vlastníci obsahu (filmová studia, nahrávací společnosti) neposkytují licence na svůj obsah streamingovým platformám. Podle Motion Picture Association (2025) použití DRM snížilo nelegální distribuci filmů ve streamingu o 62% ve srovnání s érou DVD ripů.
Při mobilním vývoji je DRM integrováno na úrovni mediálního přehrávače: vývojář používá ExoPlayer (Android), AVPlayer (iOS) nebo Shaka Player (Web), které podporují vestavěné dešifrování zašifrovaného streamu. Vývojář nemusí implementovat kryptografii — stačí integrovat SDK pro licencování.
Standard CENC (Common Encryption — ISO/IEC 23001-7) umožňuje použití jednoho zašifrovaného mediálního souboru pro všechny DRM systémy. Obsah je zašifrován jednou a klíče jsou distribuovány prostřednictvím různých licenčních serverů. To je kriticky důležité pro víceplatformní služby: Netflix zašifruje film jednou a doručí jej na Android (Widevine), iOS (FairPlay) a Windows (PlayReady) bez překódování.
CENC používá šifrování CBC s různými klíči pro zvukové a video stopy. Každý klíč je uložen v zašifrované podobě v manifestu MPD (MPEG-DASH) nebo M3U8 (HLS). Identifikátor obsahu (KID) propojuje zašifrovaný stream s licencí na serveru — bez platné licence není klíč dešifrován.
Proces DRM přehrávání se skládá ze čtyř fází: načtení manifestu, získání licence, dešifrování obsahu a zobrazení. Každou fázi provádějí různé komponenty systému — mediální přehrávač, modul CDM a licenční server.
CDM — je chráněný softwarový nebo hardwarový modul, který provádí dešifrování obsahu. Na Androidu je CDM implementováno na úrovni API MediaDrm, na iOS — integrováno do AVFoundation prostřednictvím AVContentKeySession. CDM nikdy neodhalí klíč aplikaci — všechny kryptografické operace jsou prováděny uvnitř chráněného prostředí (TEE — Trusted Execution Environment).
Na zařízeních s hardwarovou podporou (Secure Level 1) CDM pracuje uvnitř TEE — klíč se nikdy nedostane do hlavní paměti zařízení. To je požadavek studií pro přehrávání obsahu v 4K HDR. Na zařízeních bez TEE jsou klíče dešifrovány softwarově (L3), což snižuje ochranu a omezuje maximální kvalitu na 540p.
Na mobilních platformách dominují tři DRM systémy. Každý je exkluzivní pro svůj ekosystém, ale podporuje CENC, což umožňuje použití jednoho zašifrovaného obsahu na všech platformách.
| DRM | Vývojář | Platforma | Max. kvalita | Hardwarová ochrana |
|---|---|---|---|---|
| Widevine | Android, Chrome, Android TV | 4K HDR (L1) | TEE (L1) | |
| FairPlay | Apple | iOS, iPadOS, macOS, tvOS | 4K HDR (iOS) | Secure Enclave |
| PlayReady | Microsoft | Windows, Xbox, Windows Phone | 4K (SL3000) | TPM + TEE |
Pro streamovací službu fungující na všech platformách je vyžadována podpora všech tří DRM. Praktickým řešením je použití CDN s podporou multi-DRM (Muvi, Vualto, Axinom), které automaticky směrují žádosti o licence k příslušnému serveru v závislosti na zařízení uživatele. Podle Streaming Learning Center (2025) používá 78% streamovacích služeb přístup Multi-DRM.
Standard MPEG-DASH s CENC zjednodušuje architekturu: obsah je zašifrován jednou sdíleným klíčem a systém DRM je vybrán na straně klienta. Licenční server obdrží požadavek s identifikátorem zařízení a vrátí klíč zašifrovaný pro konkrétní CDM. Žádný rozdíl v obsahu pro různé platformy — pouze jiný licenční server.
Widevine — DRM systém Google, který je de facto standardem na Androidu. Podporuje tři úrovně zabezpečení, které určují, kde a jak probíhá dešifrování obsahu. Úroveň zabezpečení závisí na hardwarových možnostech zařízení a určuje maximální rozlišení obsahu.
Widevine L1 (hardwarová) — nejchráněnější úroveň. Všechny kryptografické operace jsou prováděny uvnitř Trusted Execution Environment (TEE). Klíč nikdy neopustí chráněnou oblast. Zařízení s L1 mohou přehrávat obsah až do 4K HDR. Je vyžadována certifikace Google — procedura, kterou procházejí vlajkové lodi zařízení.
Widevine L3 (softwarová) — dešifrování probíhá v hlavní paměti zařízení. Klíč může být získán technicky zdatným útočníkem. Rozlišení je omezeno na 540p (960x540) pro prémiový obsah. Všechna zařízení s Androidem podporují L3, i když nejsou certifikována pro L1.
Widevine L2 — vzácná mezilehlá úroveň, kde dešifrování probíhá v TEE, ale vykreslování nechráněnou cestou. Používá se na některých Smart TV. Na mobilních zařízeních se prakticky nevyskytuje.
import android.media.MediaDrm
import android.media.UUID
fun checkWidevineLevel(): String {
val widevineUuid = UUID.fromString("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed")
val mediaDrm = MediaDrm(widevineUuid)
val securityLevel = mediaDrm.getPropertyString(
MediaDrm.PROPERTY_SECURITY_LEVEL
)
return when (securityLevel) {
"L1" -> "Widevine L1 — hardwarová ochrana"
"L3" -> "Widevine L3 — softwarová ochrana"
else -> "Widevine $securityLevel"
}
}
Metoda vyžaduje od CDM vlastnost securityLevel pomocí UUID Widevine. Vrácená hodnota — řetězec L1, L2 nebo L3 — označuje aktuální úroveň ochrany zařízení. Tato informace je kritická pro streamovací služby: pokud má zařízení pouze L3, obsah v 4K nelze zobrazit.
FairPlay — DRM systém Apple, integrovaný do všech platforem ekosystému: iOS, iPadOS, macOS, tvOS a watchOS. Na rozdíl od Widevine, FairPlay nemá úrovně zabezpečení — ochrana je určena zařízením. Na iOS se Secure Enclave poskytuje FairPlay úroveň ochrany srovnatelnou s Widevine L1.
FairPlay pracuje výhradně s protokolem HLS (HTTP Live Streaming). Obsah je zabalen do segmentů .ts (MPEG-TS) nebo fragmentů .m4s (fMP4). Manifest M3U8 obsahuje značku #EXT-X-KEY s URI licenčního serveru (KSM — Key Server Module) a iniciační IV. Při spuštění přehrávání AVPlayer načte manifest a prostřednictvím AVContentKeySession požaduje klíč.
import AVFoundation
let contentKeySession = AVContentKeySession(keySystem: fairPlayStreaming)
let player = AVPlayer(playerItem: playerItem)
contentKeySession.setDelegate(self, queue: delegateQueue)
func contentKeySession(
_ session: AVContentKeySession,
didProvide keyRequest: AVContentKeyRequest
) {
let assetId = keyRequest.identifier as! String
sendLicenseRequest(assetId) { licenseData in
keyRequest.processContentKeyResponse(
AVContentKeyResponse(fairPlayStreamingKeyResponseData: licenseData)
)
}
}
Delegát AVContentKeySession obdrží žádost o klíč s identifikátorem obsahu (assetId). Aplikace odešle toto ID na svůj licenční server (KSM), který vrátí zašifrovaný klíč. Volání processContentKeyResponse předá klíč CDM k dešifrování. Pokud je licence neplatná (prošlá, nezaplacená), server vrátí chybu 403 a AVPlayer nezahájí přehrávání.
FairPlay podporuje persistent keys — uložení licence na zařízení pro offline prohlížení. Po získání klíče aplikace zavolá processContentKeyResponse s příznakem allowsPersistableKey. Klíč je uložen v Keychain a může být použit bez dotazování serveru při opakovaném sledování. Doba platnosti offline licence je však omezena — obvykle 7–30 dní, po které je vyžadována obnova.
Offline licence jsou uloženy v chráněném úložišti iOS — Keychain. Při pokusu o prolomení (jalibreak, extrakce dumpu paměti) Secure Enclave zničí klíče. Podle Apple (2025) se technologie persistent keys používá v Apple TV+, Netflix a Disney+ pro stahování obsahu na iPad před cestou.
PlayReady — DRM od Microsoftu, používané na Windows, Xbox a zastaralých Windows Phone. I když se PlayReady na mobilních zařízeních vyskytuje méně často než Widevine a FairPlay, je důležité pro univerzální streamovací řešení fungující na všech platformách Microsoft. PlayReady podporuje jak softwarovou, tak hardwarovou ochranu prostřednictvím TPM.
PlayReady používá architekturu SL (Security Level): SL2000 (softwarová, analog Widevine L3), SL3000 (hardwarová, analog L1). Na Xbox Series X pracuje PlayReady SL3000 prostřednictvím TEE+TPM — klíče jsou extrahovány pouze v chráněném prostředí. To umožňuje přehrávání 4K Blu-ray na konzoli bez rizika kopírování.
Podle Microsoft Docs (2026) PlayReady podporuje CENC a může pracovat s MPEG-DASH prostřednictvím Media Source Extensions (MSE) v prohlížečích Edge. Pro mobilní aplikace na Android a iOS je PlayReady k dispozici prostřednictvím SDK, ale používá se zřídka — především pro firemní aplikace a mediální služby Microsoftu.
Microsoft poskytuje PlayReady Native SDK pro Android a iOS. Integrace se provádí prostřednictvím ExoPlayer s rozšířením PlayReady: vývojář přidá PlayReadyRenderer, který se vloží do řetězce dekódování. ExoPlayer automaticky přepíná mezi Widevine a PlayReady v závislosti na tom, který DRM je uveden v manifestu MPD.
I když se PlayReady v mobilních aplikacích vyskytuje zřídka, jeho podpora je povinná pro služby, které jsou součástí ekosystému Microsoft — například firemní vzdělávací platformy na SharePoint a Stream. Podle Microsoft (2025) se PlayReady používá ve 23% firemních mediálních řešení oproti 62% pro Widevine.
Integrace DRM do mobilní aplikace nevyžaduje psaní kryptografického kódu — vývojář pracuje s přehrávačem, který podporuje DRM ihned po vybalení. Podívejme se na integraci na Androidu prostřednictvím ExoPlayer s rozšířením DRM.
val drmSessionManager = DefaultDrmSessionManager.Builder()
.setUuidAndExoMediaDrmProvider(
C.WIDEVINE_UUID,
FrameworkMediaDrm.DEFAULT_PROVIDER
)
.setMultiSession(true)
.build(mediaDrmCallback)
val mediaItem = MediaItem.Builder()
.setUri(mpdUrl)
.setDrmConfiguration(
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri(licenseUrl)
.setLicenseRequestHeaders(headers)
.build()
)
.build()
exoPlayer.setMediaItem(mediaItem)
exoPlayer.prepare()
DefaultDrmSessionManager spravuje DRM relaci: vytváří relaci MediaDrm, zpracovává žádosti o licence a předává klíče dekodéru. Parametr setMultiSession(true) umožňuje současné dešifrování více streamů (audio + video) v různých relacích. MediaDrmCallback implementuje HTTP požadavek na licenční server — obvykle POST s tělem požadavku ve formátu SignedRequest.
val mediaDrmCallback = DefaultDrmSessionManager.MediaDrmCallback {
url, requestBody ->
val response = OkHttpClient().newCall(
Request.Builder()
.url(url)
.post(RequestBody.create(requestBody, MediaType.parse("application/octet-stream")))
.addHeader("Authorization", "Bearer " )
.build()
).execute()
val responseBytes = response.body?.bytes()
?: throw DrmSessionException(Exception("Empty license response"))
responseBytes
}
Callback odešle POST požadavek na licenční server s UUID Widevine v těle. Server ověří autentizaci uživatele (token v hlavičce) a vrátí zašifrovaný klíč. Pokud uživatel nemá aktivní předplatné, server vrátí 403 Forbidden — ExoPlayer vygeneruje DRM chybu, kterou je třeba zpracovat prostřednictvím onPlayerError.
DRM chyby vznikají, když je licence neplatná, prošlá nebo zařízení nepodporuje požadovanou úroveň ochrany. ExoPlayer předá chybu prostřednictvím Player.Listener.onPlayerError s kódem TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED nebo TYPE_SOURCE. Doporučuje se zobrazit uživateli informativní zprávu: „Obsah není pro toto zařízení k dispozici” nebo „Pro prodloužení předplatného pro sledování”.
Podle analýzy streamovacích služeb (2025) až 8% neúspěšných startů přehrávání souvisí s DRM chybami. Z nich 60% tvoří prošlé licence, 25% — nekompatibilita zařízení a 15% — síťové chyby při žádosti o klíč. Automatický opakovaný pokus po 5 sekundách řeší 40% případů síťových chyb.
Často kladené otázky
Technicky možné na zařízeních s Widevine L3 (softwarová ochrana), kde lze klíč získat z paměti. Na L1 a FairPlay se Secure Enclave je obejití extrémně obtížné — je vyžadován fyzický přístup k TEE. Obsahová studia cílí na zařízení L1 pro prémiový obsah.
S největší pravděpodobností zařízení není certifikováno pro Widevine L1 a používá L3. Netflix omezuje kvalitu na 540p na zařízeních L3. Zkontrolujte úroveň Widevine pomocí aplikace DRM Info z Google Play. Vlajkové lodě Samsung, Pixel a OnePlus mají obvykle L1.
Použijte Multi-DRM: Widevine pro Android, FairPlay pro Apple, PlayReady pro Windows. Služby jako Axinom nebo Vualto poskytují jednotné API pro všechny tři DRM. Obsah je zašifrován jednou prostřednictvím CENC a výběr DRM probíhá automaticky na straně klienta.
Na iOS použijte persistent keys FairPlay prostřednictvím AVContentKeySession. Na Androidu — Widevine Offline License prostřednictvím ExoPlayer OfflineLicenseHelper. Klíč je uložen lokálně v Keychain (iOS) nebo KeyStore (Android) s omezenou dobou platnosti — obvykle 7 až 30 dní.
KID (Key ID) — jedinečný 16-bajtový identifikátor šifrovacího klíče v manifestu CENC. Každý KID je vázán na konkrétní segment obsahu (například 10minutový segment filmu). Licenční server používá KID k nalezení příslušného klíče ve své databázi. Jeden film může obsahovat až 20 různých KID pro různé části.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také