ExoPlayer używa interfejsu API MediaDrm
na Androida do obsługi odtwarzania z zabezpieczeniem DRM.
Minimalne wersje Androida wymagane przez różne obsługiwane schematy DRM,
z obsługiwanymi formatami strumieniowania są opisane w
ta tabela:
Schemat DRM | Numer wersji Androida | Poziom Android API | Obsługiwane formaty |
---|---|---|---|
Widevine „cenc” | 4.4 | 19 | DASH, HLS (tylko FMP4) |
Widevine „cbcs” | 7.1 | 25 | DASH, HLS (tylko FMP4) |
ClearKey „cenc” | 5,0 | 21 | DASH |
PlayReady SL2000 „cenc” | Android TV | Android TV | DASH, SmoothStreaming, HLS (tylko FMP4). |
W przypadku odtwarzania treści chronionych DRM za pomocą ExoPlayer używany jest identyfikator UUID systemu DRM.
należy określić system
podczas tworzenia elementu multimedialnego.
właściwości. Odtwarzacz użyje tych właściwości, aby:
i skonfigurować domyślną implementację interfejsu DrmSessionManager
o nazwie
DefaultDrmSessionManager
, który sprawdzi się w większości przypadków. Do niektórych zastosowań
mogą być konieczne dodatkowe właściwości DRM, jak opisano w
sekcji.
Rotacja kluczy
Aby odtwarzać strumienie z rotującymi kluczami, przekaż true
do
MediaItem.DrmConfiguration.Builder.setMultiSession
podczas tworzenia multimediów
elementu.
Treść z wieloma kluczami
Treści z wieloma kluczami składają się z wielu strumieni, z których niektóre wykorzystują różne niż inne. Treści z wieloma klawiszami można odtwarzać na jeden z dwóch sposobów w zależności od na temat konfiguracji serwera licencji.
Przypadek 1. Serwer licencji odpowiada, podając wszystkie klucze treści
W takim przypadku serwer licencji jest tak skonfigurowany, że po otrzymaniu żądanie jednego klucza, odpowiada wszystkimi kluczami dla treści. To zgłoszenie obsługiwany przez ExoPlayer, bez konieczności specjalnej konfiguracji. Adaptacja między strumieniami (np. w jakości SD i HD) jest płynna, nawet jeśli używają różnych klawiszy.
W miarę możliwości zalecamy skonfigurowanie serwera licencji tak, aby sposób. Jest to najbardziej wydajny i niezawodny sposób obsługi odtwarzania treści, ponieważ klient nie musi wysyłać wielu próśb o licencje. aby mieć dostęp do różnych strumieni.
Przypadek 2: serwer licencji odpowiada tylko z żądanym kluczem
W takiej sytuacji serwer licencji jest skonfigurowany tak, aby odpowiadać tylko przy użyciu klucza
określone w żądaniu. Treści z wieloma kluczami mogą być odtwarzane w ramach tej licencji
konfiguracji serwera, przekazując parametr true
do
MediaItem.DrmConfiguration.Builder.setMultiSession
podczas tworzenia multimediów
elementu.
Nie zalecamy konfigurowania serwera licencji w taki sposób. it wymaga dodatkowych żądań licencji do odtwarzania treści z wieloma kluczami, co oznacza mniej wydajne i niezawodne niż opisana powyżej alternatywa.
Klucze offline
Zestaw kluczy offline można wczytać, przekazując identyfikator zestawu kluczy do
MediaItem.DrmConfiguration.Builder.setKeySetId
podczas tworzenia elementu multimedialnego.
Umożliwia to odtwarzanie przy użyciu klawiszy zapisanych w kluczu offline ustawionym za pomocą atrybutu
określony identyfikator.
Sesje DRM w przypadku czyszczenia treści
Użycie obiektu zastępczego DrmSessions
umożliwia usłudze ExoPlayer
używanie tych samych dekoderów w przypadku:
czyść treści używane podczas odtwarzania zaszyfrowanych treści. Gdy multimedia zawierają
sekcji zarówno uporządkowanych, jak i zaszyfrowanych, możesz użyć obiektu zastępczego DrmSessions
.
aby uniknąć ponownego tworzenia dekoderów przy przejściu między trybem czystym a zaszyfrowanym
. Użycie obiektu zastępczego DrmSessions
na ścieżce audio i wideo może
można włączyć, przekazując true
do
MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks
, gdy
podczas tworzenia elementu multimedialnego.
Korzystanie z niestandardowego obiektu DrmSessionManager
Jeśli aplikacja chce dostosować element DrmSessionManager
używany do odtwarzania, może
zaimplementuj DrmSessionManagerProvider
i przekaż go do
MediaSource.Factory
, używana przy tworzeniu odtwarzacza. Usługodawca może
wybierz, czy za każdym razem będziesz tworzyć nową instancję menedżera. Aby zawsze
użyj tej samej instancji:
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);
Poprawianie wydajności odtwarzania
Jeśli obraz się zacina podczas odtwarzania treści z zabezpieczeniami DRM na urządzeniu na urządzeniach z dowolną wersją Androida – od Androida 6.0 (poziom interfejsu API 23) do w tym w Androidzie 11 (poziom interfejsu API 30), spróbuj włączyć bufor asynchroniczny .