DRM (Digital Rights Management) — raqamli kontentni ruxsatsiz nusxalash va tarqatishdan himoya qiluvchi texnologiyalar to‘plami. Mobil ilovalarda DRM video, audio va elektron kitoblarni shifrlash uchun ishlatiladi, huquq egalari va iste’molchilar o‘rtasida litsenziya shartnomalariga rioya qilinishini ta’minlaydi. Google Widevine Documentation, 2026 ma’lumotlariga ko‘ra, DRM ko‘pchilik striming xizmatlariga — Netflix, Spotify, Apple TV+ — o‘rnatilgan va premium kontentni qonuniy tarqatish uchun majburiydir.
Asosiy
DRM — raqamli kontentga kirishni boshqaruvchi kriptografik va dasturiy usullar majmuidir. Oddiy shifrlashdan farqli o‘laroq, DRM litsenziyalash tizimini o‘z ichiga oladi: kontent shifrlangan va uni ko‘rish uchun foydalanuvchining huquqlari tekshirilgandan keyin beriladigan kalit talab qilinadi.
DRM-ning asosiy vazifasi qaroqchilikning oldini olish va mintaqaviy cheklovlarga rioya qilishni ta’minlashdir. DRM bo‘lmasa, kontent egalari (kino studiyalari, ovoz yozish leybllari) o‘z kontentlarini striming platformalariga litsenziyalashmaydi. Motion Picture Association (2025) ma’lumotlariga ko‘ra, DRM dan foydalanish filmlarning strimingda noqonuniy tarqalishini DVD riplari davriga nisbatan 62% ga kamaytirdi.
Mobil ishlanmada DRM media pleer darajasida o‘rnatiladi: dasturchi shifrlangan oqimning o‘rnatilgan shifrini ochadigan ExoPlayer (Android), AVPlayer (iOS) yoki Shaka Player (Web) dan foydalanadi. Dasturchi kriptografiyani amalga oshirishi shart emas — litsenziyalash uchun SDK ni integratsiya qilish kifoya.
CENC (Common Encryption — ISO/IEC 23001-7) standarti barcha DRM tizimlari uchun bitta shifrlangan media fayldan foydalanishga imkon beradi. Kontent bir marta shifrlanadi, kalitlar esa turli litsenziya serverlari orqali tarqatiladi. Bu ko‘p platformali xizmatlar uchun juda muhim: Netflix filmni bir marta shifrlaydi va uni Android (Widevine), iOS (FairPlay) va Windows (PlayReady) ga qayta kodlamasdan yetkazib beradi.
CENC audio va video yo‘llari uchun turli kalitlar bilan CBC shifrlashdan foydalanadi. Har bir kalit MPD (MPEG-DASH) yoki M3U8 (HLS) manifestida shifrlangan shaklda saqlanadi. Kontent identifikatori (KID) shifrlangan oqimni serverdagi litsenziya bilan bog‘laydi — haqiqiy litsenziya bo‘lmasa, kalit shifrdan chiqarilmaydi.
DRM ko‘paytirish jarayoni to‘rt bosqichdan iborat: manifestni yuklash, litsenziya olish, kontent shifrini ochish va ko‘rsatish. Har bir bosqich tizimning turli komponentlari — media pleer, CDM moduli va litsenziya serveri tomonidan bajariladi.
CDM — kontent shifrini ochadigan himoyalangan dasturiy yoki apparat moduli. Android-da CDM MediaDrm API darajasida, iOS-da esa AVContentKeySession orqali AVFoundation-ga o‘rnatilgan. CDM hech qachon kalitni ilovaga oshkor etmaydi — barcha kriptografik operatsiyalar himoyalangan muhit ichida (TEE — Trusted Execution Environment) bajariladi.
Apparat qo‘llab-quvvatlovi bo‘lgan qurilmalarda (Secure Level 1), CDM TEE ichida ishlaydi — kalit hech qachon qurilmaning asosiy xotirasiga tushmaydi. Bu 4K HDR da kontentni ko‘paytirish uchun studiyalarning talabidir. TEE bo‘lmagan qurilmalarda kalitlar dasturiy ravishda shifrdan chiqariladi (L3), bu himoyani kamaytiradi va maksimal sifatni 540p bilan cheklaydi.
Mobil platformalarda uchta DRM tizimi hukmronlik qiladi. Har biri o‘z ekotizimi uchun eksklyuziv, ammo CENC-ni qo‘llab-quvvatlaydi, bu barcha platformalarda yagona shifrlangan kontentdan foydalanishga imkon beradi.
| DRM | Ishlab chiqaruvchi | Platforma | Maks. sifat | Apparat himoyasi |
|---|---|---|---|---|
| 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 |
Barcha platformalarda ishlaydigan striming xizmati uchun har uchala DRM ni qo‘llab-quvvatlash talab qilinadi. Amaliy yechim — foydalanuvchining qurilmasiga qarab litsenziya so‘rovlarini avtomatik ravishda tegishli serverga yo‘naltiruvchi multi-DRM qo‘llab-quvvatloviga ega CDN (Muvi, Vualto, Axinom) dan foydalanish. Streaming Learning Center (2025) ma’lumotlariga ko‘ra, striming xizmatlarining 78% Multi-DRM yondashuvidan foydalanadi.
CENC bilan MPEG-DASH standarti arxitekturani soddalashtiradi: kontent umumiy kalit bilan bir marta shifrlanadi, DRM tizimi esa mijoz tomonida tanlanadi. Litsenziya serveri qurilma identifikatori bilan so‘rovni oladi va muayyan CDM uchun shifrlangan kalitni qaytaradi. Turli platformalar uchun kontentda farq yo‘q — faqat turli litsenziya serveri.
Widevine — Android-da de-fakto standart bo‘lgan Google DRM tizimi. Kontent shifrini ochish qayerda va qanday amalga oshirilishini belgilaydigan uchta xavfsizlik darajasini qo‘llab-quvvatlaydi. Xavfsizlik darajasi qurilmaning apparat imkoniyatlariga bog‘liq va kontentning maksimal ruxsatini belgilaydi.
Widevine L1 (apparat) — eng himoyalangan daraja. Barcha kriptografik operatsiyalar Trusted Execution Environment (TEE) ichida bajariladi. Kalit hech qachon himoyalangan hududni tark etmaydi. L1 bo‘lgan qurilmalar 4K HDR gacha kontentni ko‘paytirishi mumkin. Google sertifikati talab qilinadi — flagman qurilmalar o‘tadigan protsedura.
Widevine L3 (dasturiy) — shifrni ochish qurilmaning asosiy xotirasida amalga oshiriladi. Kalit texnik bilimli hujumchi tomonidan chiqarilishi mumkin. Premium kontent uchun ruxsat 540p (960x540) bilan cheklangan. L1 uchun sertifikatlangan bo‘lmasa ham, Android bo‘lgan barcha qurilmalar L3 ni qo‘llab-quvvatlaydi.
Widevine L2 — noyob oraliq daraja, bu erda shifrni ochish TEE da, ammo renderlash himoyalanmagan yo‘lda amalga oshiriladi. Ba’zi Smart TV larda ishlatiladi. Mobil qurilmalarda deyarli uchramaydi.
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 — apparat himoyasi"
"L3" -> "Widevine L3 — dasturiy himoya"
else -> "Widevine $securityLevel"
}
}
Metod CDM dan Widevine UUID orqali securityLevel xususiyatini so‘raydi. Qaytarilgan qiymat — L1, L2 yoki L3 qatori — qurilmaning joriy himoya darajasini ko‘rsatadi. Bu ma’lumot striming xizmatlari uchun juda muhim: qurilma faqat L3 ga ega bo‘lsa, 4K kontentni ko‘rsatib bo‘lmaydi.
FairPlay — ekotizimning barcha platformalariga o‘rnatilgan Apple DRM tizimi: iOS, iPadOS, macOS, tvOS va watchOS. Widevine-dan farqli o‘laroq, FairPlay xavfsizlik darajalariga ega emas — himoya qurilma tomonidan belgilanadi. Secure Enclave bilan iOS da FairPlay Widevine L1 bilan solishtirish mumkin bo‘lgan himoya darajasini ta’minlaydi.
FairPlay faqat HLS (HTTP Live Streaming) protokoli bilan ishlaydi. Kontent .ts (MPEG-TS) segmentlariga yoki .m4s (fMP4) fragmentlariga paketlanadi. M3U8 manifesti litsenziya serverining URI (KSM — Key Server Module) va IV boshlang‘ich qiymati bilan #EXT-X-KEY tegini o‘z ichiga oladi. Ko‘paytirish boshlanganda, AVPlayer manifestni o‘qiydi va AVContentKeySession orqali kalitni so‘raydi.
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)
)
}
}
AVContentKeySession delegati kontent identifikatori (assetId) bilan kalit so‘rovini oladi. Ilova ushbu ID ni o‘z litsenziya serveriga (KSM) yuboradi, u shifrlangan kalitni qaytaradi. processContentKeyResponse chaqiruvi kalitni shifrni ochish uchun CDM ga uzatadi. Litsenziya haqiqiy emas bo‘lsa (muddati o‘tgan, to‘lanmagan), server 403 xatosini qaytaradi va AVPlayer ko‘paytirishni boshlamaydi.
FairPlay persistent keys — offline ko‘rish uchun litsenziyani qurilmada saqlashni qo‘llab-quvvatlaydi. Kalitni olgandan so‘ng, ilova allowsPersistableKey bayrog‘i bilan processContentKeyResponse ni chaqiradi. Kalit Keychain da saqlanadi va qayta ko‘rishda serverga murojaat qilmasdan ishlatilishi mumkin. Biroq, offline litsenziyaning amal qilish muddati cheklangan — odatda 7–30 kun, keyin yangilash talab qilinadi.
Offline litsenziyalar iOS ning himoyalangan omborida — Keychain da saqlanadi. Buzish urinishida (jalibreak, xotira dumpini chiqarish) Secure Enclave kalitlarni yo‘q qiladi. Apple (2025) ma’lumotlariga ko‘ra, persistent keys texnologiyasi safardan oldin iPad ga kontent yuklab olish uchun Apple TV+, Netflix va Disney+ da ishlatiladi.
PlayReady — Windows, Xbox va eskirgan Windows Phone da ishlatiladigan Microsoft DRM i. Mobil qurilmalarda PlayReady Widevine va FairPlay dan kamroq uchrasa-da, Microsoft ning barcha platformalarida ishlaydigan universal striming yechimlari uchun muhimdir. PlayReady TPM orqali ham dasturiy, ham apparat himoyasini qo‘llab-quvvatlaydi.
PlayReady SL (Security Level) arxitekturasidan foydalanadi: SL2000 (dasturiy, Widevine L3 analogi), SL3000 (apparat, L1 analogi). Xbox Series X da PlayReady SL3000 TEE+TPM orqali ishlaydi — kalitlar faqat himoyalangan muhitda chiqariladi. Bu konsolda nusxalash xavfisiz 4K Blu-ray ko‘paytirishga imkon beradi.
Microsoft Docs (2026) ma’lumotlariga ko‘ra, PlayReady CENC ni qo‘llab-quvvatlaydi va Edge brauzerlarida Media Source Extensions (MSE) orqali MPEG-DASH bilan ishlashi mumkin. Android va iOS uchun mobil ilovalarda PlayReady SDK orqali mavjud, ammo kamdan-kam ishlatiladi — asosan korporativ ilovalar va Microsoft media xizmatlari uchun.
Microsoft Android va iOS uchun PlayReady Native SDK ni taqdim etadi. Integratsiya PlayReady kengaytmasi bilan ExoPlayer orqali amalga oshiriladi: dasturchi dekodlash zanjiriga o‘rnatiladigan PlayReadyRenderer ni qo‘shadi. ExoPlayer MPD manifestida qaysi DRM ko‘rsatilganiga qarab Widevine va PlayReady o‘rtasida avtomatik ravishda o‘tadi.
PlayReady mobil ilovalarda kamdan-kam uchrasa-da, uning qo‘llab-quvvatlashi Microsoft ekotizimiga kiruvchi xizmatlar — masalan, SharePoint va Stream dagi korporativ ta’lim platformalari uchun majburiydir. Microsoft (2025) ma’lumotlariga ko‘ra, PlayReady korporativ media yechimlarining 23 foizida ishlatiladi, Widevine esa 62 foizida.
DRM ni mobil ilovaga integratsiyasi kriptografik kod yozishni talab qilmaydi — dasturchi DRM ni oldindan qo‘llab-quvvatlaydigan pleer bilan ishlaydi. Android da DRM kengaytmasi bilan ExoPlayer orqali integratsiyani ko‘rib chiqamiz.
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 DRM sessiyasini boshqaradi: MediaDrm sessiyasini yaratadi, litsenziya so‘rovlarini qayta ishlaydi va kalitlarni dekoderga uzatadi. setMultiSession(true) parametri turli sessiyalarda bir vaqtning o‘zida bir nechta oqim (audio + video) shifrini ochishga imkon beradi. MediaDrmCallback litsenziya serveriga HTTP so‘rovini amalga oshiradi — odatda SignedRequest formatidagi so‘rov tanasi bilan POST.
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 litsenziya serveriga tanada Widevine UUID bilan POST so‘rovini yuboradi. Server foydalanuvchining autentifikatsiyasini (sarlavhadagi token) tekshiradi va shifrlangan kalitni qaytaradi. Agar foydalanuvchining faol obunasi bo‘lmasa, server 403 Forbidden ni qaytaradi — ExoPlayer onPlayerError orqali boshqarilishi kerak bo‘lgan DRM xatosini yaratadi.
DRM xatolari litsenziya haqiqiy emas bo‘lganda, muddati o‘tganda yoki qurilma talab qilinadigan himoya darajasini qo‘llab-quvvatlamaganda yuz beradi. ExoPlayer TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED yoki TYPE_SOURCE kodi bilan Player.Listener.onPlayerError orqali xatoni uzatadi. Foydalanuvchiga ma’lumot beruvchi xabar ko‘rsatish tavsiya etiladi: „Kontent ushbu qurilma uchun mavjud emas” yoki „Ko‘rish uchun obunani uzaytiring”.
Striming xizmatlari tahliliga (2025) ko‘ra, muvaffaqiyatsiz ko‘paytirish boshlanishlarining 8 foizi DRM xatolari bilan bog‘liq. Ularning 60 foizi — muddati o‘tgan litsenziyalar, 25 foizi — qurilma mos kelmasligi va 15 foizi — kalit so‘rovi paytida tarmoq xatolari. 5 soniyadan keyin avtomatik qayta urinish tarmoq xatolarining 40 foiz holatlarini hal qiladi.
Tez-tez beriladigan savollar
Texnik jihatdan Widevine L3 (dasturiy himoya) bo‘lgan qurilmalarda mumkin, bu erda kalit xotiradan chiqarilishi mumkin. L1 va Secure Enclave bilan FairPlay da chetlab o‘tish juda qiyin — TEE ga jismoniy kirish talab qilinadi. Kontent studiyalari premium kontent uchun L1 qurilmalariga yo‘naltiriladi.
Katta ehtimol bilan, qurilma Widevine L1 uchun sertifikatlanmagan va L3 dan foydalanmoqda. Netflix L3 qurilmalarida sifatni 540p bilan cheklaydi. Google Play dan DRM Info ilovasi orqali Widevine darajasini tekshiring. Samsung, Pixel va OnePlus flagman qurilmalari odatda L1 ga ega.
Multi-DRM dan foydalaning: Android uchun Widevine, Apple uchun FairPlay, Windows uchun PlayReady. Axinom yoki Vualto kabi xizmatlar har uchala DRM uchun yagona API ni taqdim etadi. Kontent CENC orqali bir marta shifrlanadi, DRM tanlovi esa mijoz tomonida avtomatik ravishda amalga oshiriladi.
iOS da AVContentKeySession orqali FairPlay persistent keys dan foydalaning. Android da — ExoPlayer OfflineLicenseHelper orqali Widevine Offline License. Kalit cheklangan amal qilish muddati bilan — odatda 7 dan 30 kungacha — Keychain (iOS) yoki KeyStore (Android) da lokal saqlanadi.
KID (Key ID) — CENC manifestida shifrlash kalitining noyob 16 baytli identifikatori. Har bir KID kontentning ma’lum bir segmentiga (masalan, filmning 10 daqiqali segmentiga) bog‘langan. Litsenziya serveri o‘z ma’lumotlar bazasida tegishli kalitni topish uchun KID dan foydalanadi. Bitta film turli qismlar uchun 20 tagacha turli KID ni o‘z ichiga olishi mumkin.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.