ExoPlayer, DRM korumalı oynatmayı desteklemek için Android'in MediaDrm
API'sini kullanır.
Desteklenen farklı DRM şemaları için gereken minimum Android sürümleri
destekledikleri akış biçimleriyle ilgili bilgiler için
aşağıdaki tabloda bulabilirsiniz:
DRM şeması | Android sürüm numarası | Android API düzeyi | Desteklenen biçimler |
---|---|---|---|
Widevine "cenc" | 4.4 | 19 | DASH, HLS (yalnızca FMP4) |
Widevine "cbcs" | 7.1 | 25 | DASH, HLS (yalnızca FMP4) |
DeleteKey "cenc" | 5,0 | 21 | DASH |
PlayReady SL2000 "cenc" | Android TV | Android TV | DASH, SmoothStreaming, HLS (yalnızca FMP4) |
DRM korumalı içeriği ExoPlayer ile oynatmak için DRM'nin UUID'si,
sistem belirtilmelidir
medya öğesi oluştururken ve diğer
özellikleri de sağlanabilir. Oynatıcı, bu özellikleri kullanarak
DrmSessionManager
öğesinin varsayılan uygulamasını derlemek için
DefaultDrmSessionManager
, çoğu kullanım alanı için uygundur. Bazı kullanımlar için
aşağıdaki durumlarda belirtildiği şekilde ek DRM özelliklerinin gösterilmesi gerekebilir.
bölümlerini kontrol edin.
Anahtar rotasyonu
Dönen anahtarlarla yayınları oynatmak için true
öğesini şuraya geçirin:
Medyayı oluştururken MediaItem.DrmConfiguration.Builder.setMultiSession
öğe.
Çok önemli içerik
Çok anahtarlı içerik birden fazla canlı yayından oluşur. Bu yayınlarda bazı akışlar farklı daha fazla güvenir. Çok tuşlu içerik, aşağıdakilere bağlı olarak iki yöntemden biriyle oynatılabilir: lisans sunucusunun nasıl yapılandırıldığına bağlıdır.
Durum 1: Lisans sunucusu, içeriğin tüm anahtarlarıyla yanıt veriyor
Bu durumda lisans sunucusu, bu istek, içeriğin tüm anahtarlarıyla yanıt verir. Bu vaka hiçbir özel yapılandırmaya gerek kalmadan ExoPlayer tarafından işlenir. Adaptasyon akışlar arasında (ör. SD ve HD video) farklı veri akışları kullansalar bile tuşlarını kullanın.
Mümkün olduğunda lisans sunucunuzu şuna göre yapılandırmanızı öneririz: sağlar. Çok tuşlu oynatmanın çalınmasını desteklemenin en verimli ve sağlam yoludur Çünkü bu, istemcinin birden fazla lisans talebinde bulunmasını gerektirmez. farklı akışlara erişebilirsiniz.
2. Durum: Lisans sunucusu yalnızca istenen anahtarla yanıt veriyor
Bu durumda, lisans sunucusu yalnızca
belirtildiğinden emin olun. Bu lisansla çok anahtarlı içerikler oynatılabilir
true
parametresini
Medyayı oluştururken MediaItem.DrmConfiguration.Builder.setMultiSession
öğe.
Lisans sunucunuzu bu şekilde davranacak şekilde yapılandırmanız önerilmez. Google Çok anahtarlı içerikleri oynatmak için ek lisans isteği gerektirir. Bu da nispeten düşük bir yukarıda açıklanan alternatife göre daha verimli ve güçlüdür.
Çevrimdışı anahtarlar
Çevrimdışı anahtar grubu, anahtar grubu kimliği
Medya öğesini oluştururken MediaItem.DrmConfiguration.Builder.setKeySetId
.
Bu işlem,
belirtilen kimlik.
Net içerikler için DRM oturumları
DrmSessions
yer tutucusunun kullanılması, ExoPlayer
ürününün aşağıdaki işlemler için aynı kod çözücüleri kullanmasına olanak tanır:
şifrelenmiş içerik oynatırken kullanıldığı gibi net içerikler. Medya şunu içerdiğinde:
hem temiz hem de şifrelenmiş bölümleri varsa DrmSessions
yer tutucusunu kullanabilirsiniz.
Açık ve şifrelenmiş arasındaki geçişlerde kod çözücülerin yeniden oluşturulmasını önlemek için
oluşur. Ses ve video kanalları için DrmSessions
yer tutucusu
true
MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks
olduğunda
hazırlamayı da unutmayın.
Özel bir DrmSessionManager kullanma
Bir uygulama, oynatma için kullanılan DrmSessionManager
bölümünü özelleştirmek isterse şunları yapabilir:
bir DrmSessionManagerProvider
uygulayın ve bunu
MediaSource.Factory
Bu, oynatıcıyı oluştururken kullanılır. Sağlayıcı
her seferinde yeni bir yönetici örneği örneklenip oluşturulmayacağını seçebilirsiniz. Her zaman
aynı örneği kullanın:
Kotlin
val customDrmSessionManager: DrmSessionManager = CustomDrmSessionManager() // Pass a drm session manager provider to the media source factory. val mediaSourceFactory = DefaultMediaSourceFactory(context).setDrmSessionManagerProvider { customDrmSessionManager }
Java
DrmSessionManager customDrmSessionManager = new CustomDrmSessionManager(/* ... */ ); // Pass a drm session manager provider to the media source factory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDrmSessionManagerProvider(mediaItem -> customDrmSessionManager);
Oynatma performansını iyileştirme
Android 6.0'dan (API düzeyi 23) kadar herhangi bir Android sürümünü çalıştıran cihaz API düzeyi 30'u da içeren uygulamalar için eşzamansız arabelleği etkinleştirmeyi deneyebilirsiniz sıraya ekleyin.