DRM (Digital Rights Management) — a digitális tartalom jogosulatlan másolása és terjesztése elleni technológiák összessége. A mobilalkalmazásokban a DRM-et video-, audio- és e-könyvek titkosítására használják, biztosítva a jogtulajdonosok és fogyasztók közötti licencszerződések betartását. A Google Widevine Documentation, 2026 szerint a DRM be van építve a legtöbb streaming szolgáltatásba — Netflix, Spotify, Apple TV+ — és kötelező a prémium tartalom legális terjesztéséhez.
Főbb pontok
DRM — kriptográfiai és szoftveres módszerek gyűjteménye, amelyek szabályozzák a digitális tartalomhoz való hozzáférést. Az egyszerű titkosítástól eltérően a DRM tartalmaz egy licencrendszert: a tartalom titkosított, és megtekintéséhez egy kulcs szükséges, amelyet csak a felhasználó jogainak ellenőrzése után adnak ki.
A DRM fő feladata a kalózkodás megelőzése és a regionális korlátozások betartatása. DRM nélkül a tartalomtulajdonosok (filmstúdiók, lemezkiadók) nem licencelik tartalmukat a streaming platformoknak. A Motion Picture Association (2025) szerint a DRM használata 62%-kal csökkentette a filmek illegális terjesztését a streamingben a DVD-rip-ek korszakához képest.
A mobilfejlesztésben a DRM a médialejátszó szintjén van beépítve: a fejlesztő az ExoPlayert (Android), AVPlayert (iOS) vagy Shaka Playert (Web) használja, amelyek támogatják a titkosított stream beépített visszafejtését. A fejlesztőnek nem kell kriptográfiát implementálnia — elég az SDK-t integrálni a licenceléshez.
A CENC (Common Encryption — ISO/IEC 23001-7) szabvány lehetővé teszi egyetlen titkosított médiafájl használatát minden DRM rendszerhez. A tartalmat egyszer titkosítják, és a kulcsokat különböző licencszervereken keresztül osztják el. Ez kritikus a többplatformos szolgáltatások számára: a Netflix egyszer titkosítja a filmet, és elküldi Android (Widevine), iOS (FairPlay) és Windows (PlayReady) rendszerre újrakódolás nélkül.
A CENC CBC titkosítást használ különböző kulcsokkal az audio és video sávokhoz. Minden kulcs titkosított formában van tárolva az MPD (MPEG-DASH) vagy M3U8 (HLS) manifesztumban. A tartalomazonosító (KID) összeköti a titkosított streamet a szerveren lévő licenceel — érvényes licenc nélkül a kulcs nem fejthető vissza.
A DRM lejátszási folyamat négy szakaszból áll: manifesztum betöltése, licenc megszerzése, tartalom visszafejtése és megjelenítése. Minden szakaszt a rendszer különböző összetevői végeznek — a médialejátszó, a CDM modul és a licencszerver.
A CDM — egy védett szoftveres vagy hardveres modul, amely végzi a tartalom visszafejtését. Androidon a CDM a MediaDrm API szintjén van implementálva, iOS-en — beépítve az AVFoundation-ba az AVContentKeySession-en keresztül. A CDM soha nem fedi fel a kulcsot az alkalmazásnak — minden kriptográfiai művelet egy védett környezeten (TEE — Trusted Execution Environment) belül történik.
A hardveres támogatással rendelkező eszközökön (Secure Level 1) a CDM a TEE-n belül működik — a kulcs soha nem kerül az eszköz főmemóriájába. Ez a stúdiók követelménye a tartalom 4K HDR-ben történő lejátszásához. A TEE nélküli eszközökön a kulcsok szoftveresen vannak visszafejtve (L3), ami csökkenti a védelmet és a maximális minőséget 540p-re korlátozza.
A mobil platformokon három DRM rendszer dominál. Mindegyik kizárólagos a saját ökoszisztémájára, de támogatja a CENC-et, ami lehetővé teszi egyetlen titkosított tartalom használatát minden platformon.
| DRM | Fejlesztő | Platform | Max. minőség | Hardveres védelem |
|---|---|---|---|---|
| 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 |
Egy minden platformon működő streaming szolgáltatáshoz mindhárom DRM támogatása szükséges. Gyakorlati megoldás — multi-DRM támogatással rendelkező CDN (Muvi, Vualto, Axinom) használata, amelyek automatikusan a megfelelő szerverhez irányítják a licenckéréseket a felhasználó eszközétől függően. A Streaming Learning Center (2025) szerint a streaming szolgáltatások 78%-a Multi-DRM megközelítést használ.
A CENC-el ellátott MPEG-DASH szabvány egyszerűsíti az architektúrát: a tartalmat egyszer titkosítják megosztott kulccsal, és a DRM rendszert az ügyfél oldalon választják ki. A licencszerver megkapja a kérést az eszközazonosítóval, és visszaküldi az adott CDM-hez titkosított kulcsot. Nincs különbség a tartalomban a különböző platformok számára — csak más licencszerver.
Widevine — a Google DRM rendszere, amely de facto szabvány Androidon. Három biztonsági szintet támogat, amelyek meghatározzák, hol és hogyan történik a tartalom visszafejtése. A biztonsági szint az eszköz hardveres képességeitől függ és meghatározza a tartalom maximális felbontását.
Widevine L1 (hardveres) — a legvédettebb szint. Minden kriptográfiai művelet a Trusted Execution Environment (TEE) belsejében történik. A kulcs soha nem hagyja el a védett területet. Az L1-gyel rendelkező eszközök 4K HDR-ig terjedő tartalmat képesek lejátszani. Google tanúsítvány szükséges — egy eljárás, amelyen a zászlóshajó eszközök átesnek.
Widevine L3 (szoftveres) — a visszafejtés az eszköz főmemóriájában történik. A kulcsot egy technikailag képzett támadó kinyerheti. A felbontás prémium tartalom esetén 540p-re (960x540) korlátozott. Az összes Android-eszköz támogatja az L3-at, még akkor is, ha nem rendelkezik L1 tanúsítvánnyal.
Widevine L2 — egy ritka köztes szint, ahol a visszafejtés a TEE-ben történik, de a megjelenítés nem védett úton. Néhány Smart TV-n használják. Mobil eszközökön gyakorlatilag nem fordul elő.
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 — hardveres védelem"
"L3" -> "Widevine L3 — szoftveres védelem"
else -> "Widevine $securityLevel"
}
}
A metódus a CDM-től kéri a securityLevel tulajdonságot a Widevine UUID-n keresztül. A visszaadott érték — egy L1, L2 vagy L3 string — jelzi az eszköz aktuális védelmi szintjét. Ez az információ kritikus a streaming szolgáltatások számára: ha az eszköz csak L3-mal rendelkezik, a 4K tartalom nem jeleníthető meg.
FairPlay — az Apple DRM rendszere, beépítve az ökoszisztéma összes platformjába: iOS, iPadOS, macOS, tvOS és watchOS. A Widevine-tól eltérően a FairPlay-nek nincsenek biztonsági szintjei — a védelmet az eszköz határozza meg. iOS-en Secure Enclave-val a FairPlay a Widevine L1-gyel összehasonlítható védelmi szintet nyújt.
A FairPlay kizárólag a HLS (HTTP Live Streaming) protokollal működik. A tartalom .ts (MPEG-TS) szegmensekbe vagy .m4s (fMP4) fragmentumokba van csomagolva. Az M3U8 manifesztum tartalmazza a #EXT-X-KEY címkét a licencszerver URI-jával (KSM — Key Server Module) és az IV inicializálóval. A lejátszás indításakor az AVPlayer beolvassa a manifesztumot, és az AVContentKeySessionen keresztül kéri a kulcsot.
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)
)
}
}
Az AVContentKeySession delegáltja fogadja a kulcskérést a tartalomazonosítóval (assetId). Az alkalmazás elküldi ezt az ID-t a saját licencszerverére (KSM), amely visszaküldi a titkosított kulcsot. A processContentKeyResponse hívás továbbítja a kulcsot a CDM-nek visszafejtésre. Ha a licenc érvénytelen (lejárt, ki nem fizetett), a szerver 403-as hibát küld, és az AVPlayer nem indítja el a lejátszást.
A FairPlay támogatja a persistent keys — a licenc eszközön történő mentését offline megtekintéshez. A kulcs megszerzése után az alkalmazás meghívja a processContentKeyResponse-ot az allowsPersistableKey flaggel. A kulcs a Keychain-ben tárolódik, és ismételt nézésnél a szerver megkeresése nélkül használható. Az offline licenc érvényességi ideje azonban korlátozott — általában 7–30 nap, ezután megújítás szükséges.
Az offline licencek az iOS védett tárhelyén — a Keychain-ben — tárolódnak. Feltörési kísérlet (jalibreak, memóriakiiratás kinyerése) esetén a Secure Enclave megsemmisíti a kulcsokat. Az Apple (2025) szerint a persistent keys technológiát az Apple TV+, Netflix és Disney+ használja tartalom iPad-re történő letöltéséhez utazás előtt.
PlayReady — Microsoft DRM, amely Windows, Xbox és elavult Windows Phone rendszeren használatos. Bár a mobileszközökön a PlayReady ritkább, mint a Widevine és a FairPlay, fontos az összes Microsoft platformon működő univerzális streaming megoldások számára. A PlayReady mind szoftveres, mind hardveres védelmet támogat TPM-en keresztül.
A PlayReady SL (Security Level) architektúrát használ: SL2000 (szoftveres, a Widevine L3 analógja), SL3000 (hardveres, az L1 analógja). Xbox Series X-en a PlayReady SL3000 TEE+TPM-en keresztül működik — a kulcsok csak védett környezetben kerülnek kinyerésre. Ez lehetővé teszi a 4K Blu-ray lejátszást a konzolon másolási kockázat nélkül.
A Microsoft Docs (2026) szerint a PlayReady támogatja a CENC-et, és képes együttműködni az MPEG-DASH-sal a Media Source Extensions (MSE) segítségével az Edge böngészőkben. Android és iOS mobilalkalmazásokhoz a PlayReady SDK-n keresztül érhető el, de ritkán használják — főleg vállalati alkalmazásokhoz és Microsoft médiaszolgáltatásokhoz.
A Microsoft PlayReady Native SDK-t biztosít Android és iOS rendszerhez. Az integráció az ExoPlayeren keresztül történik a PlayReady kiterjesztéssel: a fejlesztő hozzáadja a PlayReadyRenderert, amely beépül a dekódolási láncba. Az ExoPlayer automatikusan vált a Widevine és PlayReady között attól függően, hogy melyik DRM van megadva az MPD manifesztumban.
Bár a PlayReady ritkán fordul elő mobilalkalmazásokban, támogatása kötelező a Microsoft ökoszisztémába tartozó szolgáltatások számára — például vállalati képző platformok a SharePointon és Streamen. A Microsoft (2025) szerint a PlayReady a vállalati médiamegoldások 23%-ában használatos, míg a Widevine 62%-ban.
A DRM integrálása a mobilalkalmazásba nem igényel kriptográfiai kód írását — a fejlesztő egy olyan lejátszóval dolgozik, amely készpénz támogatja a DRM-et. Nézzük az integrációt Androidon az ExoPlayeren keresztül a DRM kiterjesztéssel.
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()
A DefaultDrmSessionManager kezeli a DRM munkamenetet: létrehozza a MediaDrm munkamenetet, feldolgozza a licenckéréseket és továbbítja a kulcsokat a dekódernek. A setMultiSession(true) paraméter lehetővé teszi több stream (audio + video) egyidejű visszafejtését különböző munkamenetekben. A MediaDrmCallback implementálja a licencszerverhez intézett HTTP kérést — általában POST a kérés törzsével SignedRequest formátumban.
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
}
A callback POST kérést küld a licencszerverre a Widevine UUID-vel a törzsben. A szerver ellenőrzi a felhasználó hitelesítését (token a fejlécben), és visszaküldi a titkosított kulcsot. Ha a felhasználónak nincs aktív előfizetése, a szerver 403 Forbidden hibát küld — az ExoPlayer DRM hibát generál, amelyet az onPlayerError segítségével kell kezelni.
DRM hibák akkor fordulnak elő, ha a licenc érvénytelen, lejárt, vagy az eszköz nem támogatja a szükséges védelmi szintet. Az ExoPlayer a hibát a Player.Listener.onPlayerError segítségével továbbítja TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED vagy TYPE_SOURCE kóddal. Javasolt egy tájékoztató üzenet megjelenítése a felhasználó számára: „A tartalom nem érhető el ehhez az eszközhöz” vagy „Hosszabbítsa meg előfizetését a nézéshez”.
A streaming szolgáltatások elemzése (2025) szerint a sikertelen lejátszási indítások 8%-a DRM hibákhoz kapcsolódik. Ezek 60%-a lejárt licenc, 25%-a eszköz inkompatibilitás és 15%-a hálózati hiba a kulcskérésnél. Az automatikus újrapróbálkozás 5 másodperc után a hálózati hibák 40%-át megoldja.
Gyakran Ismételt Kérdések
Technikailag lehetséges Widevine L3 (szoftveres védelem) eszközökön, ahol a kulcs kinyerhető a memóriából. L1 és Secure Enclave-val rendelkező FairPlay esetén a megkerülés rendkívül nehéz — fizikai hozzáférés szükséges a TEE-hez. A tartalomstúdiók a prémium tartalomhoz L1 eszközöket céloznak.
Valószínűleg az eszköz nem rendelkezik Widevine L1 tanúsítvánnyal és L3-at használ. A Netflix L3 eszközökön 540p-re korlátozza a minőséget. Ellenőrizze a Widevine szintet a Google Play-ből származó DRM Info alkalmazással. A Samsung, Pixel és OnePlus zászlóshajó eszközei általában L1-gyel rendelkeznek.
Használjon Multi-DRM-et: Widevine-t Androidhoz, FairPlay-t Apple-höz, PlayReady-t Windowshoz. Az olyan szolgáltatások, mint az Axinom vagy a Vualto, egységes API-t biztosítanak mindhárom DRM-hez. A tartalmat egyszer titkosítják CENC-en keresztül, és a DRM választás automatikusan az ügyfél oldalon történik.
iOS-en használja a FairPlay persistent keys funkcióját az AVContentKeySessionen keresztül. Androidon — a Widevine Offline License-t az ExoPlayer OfflineLicenseHelper segítségével. A kulcs helyileg tárolódik a Keychain-ben (iOS) vagy KeyStore-ban (Android) korlátozott érvényességi idővel — általában 7-től 30 napig.
KID (Key ID) — a titkosítási kulcs egyedi 16 bájtos azonosítója a CENC manifesztumban. Minden KID a tartalom egy adott szegmenséhez van kötve (például egy film 10 perces szegmenséhez). A licencszerver a KID segítségével keresi meg a megfelelő kulcsot az adatbázisában. Egy film akár 20 különböző KID-et is tartalmazhat különböző részekhez.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is