DRM (Dijital Hak Yönetimi), dijital içeriği izinsiz kopyalamaya ve dağıtmaya karşı koruyan bir dizi teknolojidir. Mobil uygulamalarda DRM, video, ses ve e-kitapları şifrelemek için kullanılır ve hak sahipleri ile tüketiciler arasındaki lisans anlaşmalarına uyumu sağlar. Google Widevine Documentation, 2026'ya göre, DRM çoğu akış hizmetine (Netflix, Spotify, Apple TV+) yerleşiktir ve premium içeriğin yasal dağıtımı için zorunludur.
Ana Noktalar
DRM, dijital içeriğe erişimi kontrol eden kriptografik ve yazılım yöntemlerinin bir koleksiyonudur. Basit şifrelemeden farklı olarak DRM, bir lisanslama sistemi içerir: içerik şifrelenir ve görüntülemek için kullanıcının hakları doğrulandıktan sonra verilen bir anahtar gerekir.
DRM'nin temel amacı korsanlığı önlemek ve bölgesel kısıtlamalara uyumu sağlamaktır. DRM olmadan, içerik sahipleri (film stüdyoları, plak şirketleri) içeriklerini akış platformlarına lisanslamaz. Motion Picture Association (2025)'a göre DRM, DVD-rip dönemine kıyasla akışta filmlerin yasadışı dağıtımını %62 azaltmıştır.
Mobil geliştirmede DRM, medya oynatıcı seviyesine gömülür: geliştirici, şifrelenmiş akışın yerleşik şifre çözmesini destekleyen ExoPlayer (Android), AVPlayer (iOS) veya Shaka Player (Web) kullanır. Geliştiricinin kriptografi uygulaması gerekmez — sadece lisanslama için bir SDK entegre etmesi yeterlidir.
CENC standardı (Ortak Şifreleme — ISO/IEC 23001-7), tüm DRM sistemleri için tek bir şifrelenmiş medya dosyası kullanılmasına izin verir. İçerik bir kez şifrelenir ve anahtarlar farklı lisans sunucuları aracılığıyla dağıtılır. Bu, çoklu platform hizmetleri için kritiktir: Netflix bir filmi bir kez şifreler ve yeniden kodlamadan Android (Widevine), iOS (FairPlay) ve Windows (PlayReady)'e iletir.
CENC, ses ve video parçaları için farklı anahtarlarla CBC şifrelemesi kullanır. Her anahtar, MPD (MPEG-DASH) veya M3U8 (HLS) manifestosunda şifrelenmiş olarak saklanır. İçerik tanımlayıcısı (KID), şifrelenmiş akışı sunucudaki lisansa bağlar — geçerli bir lisans olmadan anahtar çözülemez.
DRM oynatma süreci dört aşamadan oluşur: manifesto yükleme, lisans alma, içerik şifre çözme ve görüntüleme. Her aşama sistemin farklı bileşenleri tarafından gerçekleştirilir — medya oynatıcı, CDM modülü ve lisans sunucusu.
CDM, içerik şifre çözme işlemini gerçekleştiren korumalı bir yazılım veya donanım modülüdür. Android'de CDM, MediaDrm API seviyesinde uygulanır; iOS'ta, AVContentKeySession aracılığıyla AVFoundation'a yerleşiktir. CDM, anahtarı asla uygulamaya açıklamaz — tüm kriptografik işlemler güvenli bir ortam (TEE — Trusted Execution Environment) içinde gerçekleştirilir.
Donanım desteği olan cihazlarda (Güvenlik Seviyesi 1), CDM TEE içinde çalışır — anahtar asla cihazın ana belleğine girmez. Bu, 4K HDR içeriği oynatmak için stüdyoların bir gereksinimidir. TEE'si olmayan cihazlarda, anahtarlar yazılımla çözülür (L3), bu da güvenliği azaltır ve maksimum kaliteyi 540p ile sınırlar.
Üç DRM sistemi mobil platformlara hakimdir. Her biri kendi ekosistemine özeldir, ancak tümü CENC'yi destekler ve tek bir şifrelenmiş içerik akışının tüm platformlarda kullanılmasına izin verir.
| DRM | Geliştirici | Platform | Maksimum Kalite | Donanım Koruması |
|---|---|---|---|---|
| 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 |
Tüm platformlarda çalışan bir akış hizmeti için üç DRM sisteminin de desteği gerekir. Pratik bir çözüm, kullanıcının cihazına göre lisans taleplerini otomatik olarak uygun sunucuya yönlendiren çoklu DRM desteğine sahip bir CDN (Muvi, Vualto, Axinom) kullanmaktır. Streaming Learning Center (2025)'a göre, akış hizmetlerinin %78'i Çoklu DRM yaklaşımını kullanmaktadır.
CENC ile MPEG-DASH standardı mimariyi basitleştirir: içerik paylaşılan bir anahtarla bir kez şifrelenir ve DRM sistemi istemci tarafında seçilir. Lisans sunucusu, cihaz tanımlayıcısıyla bir talep alır ve belirli CDM için şifrelenmiş bir anahtar döndürür. Farklı platformlar için içerikte fark yok — sadece farklı bir lisans sunucusu.
Widevine, Google'ın DRM sistemidir ve Android'de fiili standarttır. İçerik şifre çözmenin nerede ve nasıl gerçekleştirileceğini belirleyen üç güvenlik seviyesini destekler. Güvenlik seviyesi, cihazın donanım yeteneklerine bağlıdır ve maksimum içerik çözünürlüğünü belirler.
Widevine L1 (donanım) — en güvenli seviye. Tüm kriptografik işlemler Trusted Execution Environment (TEE) içinde gerçekleştirilir. Anahtar asla güvenli alanı terk etmez. L1 cihazlar 4K HDR'ye kadar içerik oynatabilir. Google sertifikası gereklidir — amiral gemisi cihazların geçtiği bir süreçtir.
Widevine L3 (yazılım) — şifre çözme, cihazın ana belleğinde gerçekleştirilir. Teknik olarak yetenekli bir saldırgan anahtarı çıkarabilir. Premium içerik için çözünürlük 540p (960x540) ile sınırlıdır. Tüm Android cihazlar, L1 için sertifikalı olmasalar bile L3'ü destekler.
Widevine L2 — nadir bir ara seviyedir; şifre çözme TEE'de gerçekleştirilir ancak oluşturma korumasız bir yoldan gider. Bazı Akıllı TV'lerde kullanılır. Mobil cihazlarda neredeyse hiç bulunmaz.
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 — donanım koruması"
"L3" -> "Widevine L3 — yazılım koruması"
else -> "Widevine $securityLevel"
}
}
Yöntem, Widevine UUID aracılığıyla CDM'ye securityLevel özelliğini sorgular. Dönüş değeri, cihazın mevcut koruma seviyesini belirten L1, L2 veya L3 dizesidir. Bu bilgi akış hizmetleri için kritiktir: bir cihaz yalnızca L3'e sahipse 4K içerik görüntülenemez.
FairPlay, Apple'ın DRM sistemidir ve tüm ekosistem platformlarında (iOS, iPadOS, macOS, tvOS ve watchOS) yerleşiktir. Widevine'in aksine FairPlay'in güvenlik seviyesi yoktur — koruma cihaz tarafından belirlenir. Secure Enclave'li iOS'ta FairPlay, Widevine L1 ile karşılaştırılabilir bir koruma seviyesi sağlar.
FairPlay yalnızca HLS (HTTP Live Streaming) protokolüyle çalışır. İçerik, .ts segmentleri (MPEG-TS) veya .m4s parçaları (fMP4) halinde paketlenir. M3U8 manifestosu, lisans sunucusu URI'si (KSM — Anahtar Sunucu Modülü) ve başlatma IV'si ile #EXT-X-KEY etiketi içerir. Oynatma başladığında, AVPlayer manifestoyu okur ve AVContentKeySession aracılığıyla anahtarı talep eder.
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 temsilcisi, içerik tanımlayıcısıyla (assetId) bir anahtar talebi alır. Uygulama bu kimliği lisans sunucusuna (KSM) gönderir ve sunucu şifrelenmiş anahtarı döndürür. ProcessContentKeyResponse çağrısı, anahtarı şifre çözme için CDM'ye iletir. Lisans geçersizse (süresi dolmuş, ödenmemiş), sunucu 403 hatası döndürür ve AVPlayer oynatmayı başlatmaz.
FairPlay, kalıcı anahtarları destekler — çevrimdışı izleme için lisansın cihazda kaydedilmesi. Anahtarı aldıktan sonra uygulama, allowsPersistableKey bayrağıyla processContentKeyResponse'u çağırır. Anahtar Keychain'de saklanır ve sonraki oynatmalarda sunucuya başvurmadan kullanılabilir. Ancak çevrimdışı lisansın sınırlı bir geçerlilik süresi vardır — genellikle 7-30 gün, sonrasında yenileme gerekir.
Çevrimdışı lisanslar, iOS'un korumalı deposu olan Keychain'de saklanır. Jailbreak veya döküm çıkarma girişiminde Secure Enclave anahtarları yok eder. Apple (2025)'a göre, kalıcı anahtar teknolojisi Apple TV+, Netflix ve Disney+'ta seyahatten önce iPad'e içerik indirmek için kullanılır.
PlayReady, Microsoft'un DRM'sidir ve Windows, Xbox ve eski Windows Phone'da kullanılır. PlayReady mobil cihazlarda Widevine ve FairPlay'den daha az yaygın olsa da, tüm Microsoft platformlarında çalışan evrensel akış çözümleri için önemlidir. PlayReady, TPM aracılığıyla hem yazılım hem de donanım korumasını destekler.
PlayReady, SL (Güvenlik Seviyesi) mimarisini kullanır: SL2000 (yazılım, Widevine L3'e benzer), SL3000 (donanım, L1'e benzer). Xbox Series X'te PlayReady SL3000, TEE+TPM aracılığıyla çalışır — anahtarlar yalnızca korumalı bir ortamda çıkarılır. Bu, konsolda kopyalama riski olmadan 4K Blu-ray oynatmaya olanak tanır.
Microsoft Docs (2026)'ya göre PlayReady, CENC'yi destekler ve Edge tarayıcılarında Media Source Extensions (MSE) aracılığıyla MPEG-DASH ile çalışabilir. Android ve iOS'taki mobil uygulamalar için PlayReady SDK aracılığıyla kullanılabilir ancak nadiren kullanılır — esas olarak kurumsal uygulamalar ve Microsoft medya hizmetleri için.
Microsoft, Android ve iOS için PlayReady Yerel SDK sağlar. Entegrasyon, PlayReady uzantılı ExoPlayer aracılığıyla yapılır: geliştirici, kod çözme zincirine gömülen PlayReadyRenderer'ı ekler. ExoPlayer, MPD manifestosunda belirtilen DRM'ye bağlı olarak Widevine ve PlayReady arasında otomatik olarak geçiş yapar.
PlayReady mobil uygulamalarda nadiren kullanılsa da, Microsoft ekosistemindeki hizmetler için desteği zorunludur — örneğin, SharePoint ve Stream'deki kurumsal eğitim platformları. Microsoft (2025)'e göre PlayReady kurumsal medya çözümlerinin %23'ünde kullanılırken Widevine %62'sinde kullanılıyor.
Mobil uygulamaya DRM entegre etmek kriptografik kod yazmayı gerektirmez — geliştirici, DRM'yi yerel olarak destekleyen bir oynatıcıyla çalışır. DRM uzantılı ExoPlayer aracılığıyla Android'de entegrasyona bakalım.
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 oturumunu yönetir: MediaDrm oturumu oluşturur, lisans taleplerini işler ve anahtarları kod çözücüye iletir. SetMultiSession(true) parametresi, farklı oturumlarda birden çok akışı (ses + video) aynı anda çözmeye olanak tanır. MediaDrmCallback, lisans sunucusuna HTTP talebini uygular — genellikle SignedRequest gövdesiyle bir 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
}
Geri çağırma, gövdesinde Widevine UUID'si ile lisans sunucusuna bir POST talebi gönderir. Sunucu, kullanıcının kimlik doğrulamasını (başlıktaki belirteç) doğrular ve şifrelenmiş anahtarı döndürür. Kullanıcının aktif bir aboneliği yoksa, sunucu 403 Forbidden döndürür — ExoPlayer bir DRM hatası oluşturur ve bu onPlayerError aracılığıyla işlenmelidir.
DRM hataları, bir lisans geçersiz olduğunda, süresi dolduğunda veya cihaz gerekli koruma seviyesini desteklemediğinde oluşur. ExoPlayer, hatayı Player.Listener.onPlayerError aracılığıyla TYPE_DRM_LICENSE_EXPIRED, TYPE_DRM_UNSUPPORTED veya TYPE_SOURCE kodlarıyla iletir. Kullanıcıya bilgilendirici bir mesaj gösterilmesi önerilir: “İçerik bu cihaz için kullanılamaz” veya “İzlemek için aboneliğinizi yenileyin.”
Akış hizmeti analizlerine (2025) göre, başarısız oynatma başlangıçlarının %8'e kadarı DRM hatalarıyla ilgilidir. Bunların %60'ı süresi dolmuş lisanslar, %25'i cihaz uyumsuzluğu ve %15'i anahtar talebi sırasında ağ hatalarıdır. 5 saniye sonra otomatik yeniden deneme, ağ hatası vakalarının %40'ını çözer.
Sık Sorulan Sorular
Widevine L3 (yazılım koruması) olan cihazlarda teknik olarak mümkündür, anahtar bellekten çıkarılabilir. L1 ve Secure Enclave'li FairPlay'de atlama son derece zordur — TEE'ye fiziksel erişim gerekir. İçerik stüdyoları premium içerik için L1 cihazları hedefler.
Büyük olasılıkla cihaz Widevine L1 için sertifikalı değil ve L3 kullanıyor. Netflix, L3 cihazlarda kaliteyi 540p ile sınırlar. Google Play'den DRM Info uygulamasıyla Widevine seviyesini kontrol edin. Samsung, Pixel ve OnePlus'ın amiral gemisi cihazları genellikle L1'e sahiptir.
Çoklu DRM kullanın: Android için Widevine, Apple için FairPlay, Windows için PlayReady. Axinom veya Vualto gibi hizmetler, üç DRM sistemi için de birleşik bir API sağlar. İçerik CENC aracılığıyla bir kez şifrelenir ve DRM seçimi istemci tarafında otomatik olarak gerçekleşir.
iOS'ta, AVContentKeySession aracılığıyla FairPlay kalıcı anahtarlarını kullanın. Android'de, ExoPlayer OfflineLicenseHelper aracılığıyla Widevine Çevrimdışı Lisansını kullanın. Anahtar, sınırlı bir geçerlilik süresiyle (genellikle 7 ila 30 gün) yerel olarak Keychain'de (iOS) veya KeyStore'da (Android) saklanır.
KID (Anahtar Kimliği) — CENC manifestosundaki şifreleme anahtarının benzersiz 16 baytlık tanımlayıcısı. Her KID, belirli bir içerik parçasına (örneğin, bir filmin 10 dakikalık segmenti) bağlıdır. Lisans sunucusu, veritabanında ilgili anahtarı bulmak için KID'yi kullanır. Tek bir film, farklı bölümler için 20'ye kadar farklı KID içerebilir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.