Dijital hak yönetimi

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.