Digitale Rechteverwaltung

ExoPlayer verwendet die MediaDrm API von Android, um die DRM-geschützte Wiedergabe zu unterstützen. Die für die verschiedenen unterstützten digitalen Rechteverwaltungsschemata erforderlichen Mindestversionen von Android sowie die unterstützten Streamingformate sind in der folgenden Tabelle aufgeführt:

DRM-Schema Android-Versionsnummer Android-API-Level Unterstützte Formate
Widevine „cenc“ 4,4 19 DASH, HLS (nur FMP4)
Widevine „cbcs“ 7.1 25 DASH, HLS (nur fMP4)
ClearKey „cenc“ 5 21 DASH
PlayReady SL2000 „cenc“ Android TV Android TV DASH, SmoothStreaming, HLS (nur fMP4)

Damit mit ExoPlayer DRM-geschützte Inhalte wiedergegeben werden können, muss die UUID des DRM-Systems beim Erstellen eines Medienelements angegeben werden. Es können auch andere Properties angegeben werden. Der Player verwendet diese Eigenschaften dann, um eine Standardimplementierung von DrmSessionManager mit dem Namen DefaultDrmSessionManager zu erstellen, die für die meisten Anwendungsfälle geeignet ist. Für einige Anwendungsfälle sind möglicherweise zusätzliche DRM-Properties erforderlich, wie in den folgenden Abschnitten beschrieben.

Schlüsselrotation

Wenn du Streams mit rotierenden Schlüsseln abspielen möchtest, übergebe beim Erstellen des Medienelements true an MediaItem.DrmConfiguration.Builder.setMultiSession.

Inhalte mit mehreren Schlüsseln

Inhalte mit mehreren Schlüsseln bestehen aus mehreren Streams, bei denen einige Streams andere Schlüssel als andere verwenden. Inhalte mit mehreren Schlüsseln können auf zwei Arten wiedergegeben werden, je nachdem, wie der Lizenzserver konfiguriert ist.

Fall 1: Der Lizenzserver antwortet mit allen Schlüsseln für die Inhalte

In diesem Fall ist der Lizenzserver so konfiguriert, dass er bei einer Anfrage für einen Schlüssel mit allen Schlüsseln für den Inhalt antwortet. Dieser Fall wird von ExoPlayer ohne spezielle Konfiguration verarbeitet. Die Anpassung zwischen Streams (z.B. SD- und HD-Video) erfolgt nahtlos, auch wenn unterschiedliche Schlüssel verwendet werden.

Wenn möglich, empfehlen wir, den Lizenzserver so zu konfigurieren, dass er sich auf diese Weise verhält. Dies ist die effizienteste und robusteste Methode zur Unterstützung der Wiedergabe von Inhalten mit mehreren Schlüsseln, da der Client nicht mehrere Lizenzanfragen für den Zugriff auf die verschiedenen Streams stellen muss.

Fall 2: Der Lizenzserver antwortet nur mit dem angeforderten Schlüssel

In diesem Fall ist der Lizenzserver so konfiguriert, dass er nur mit dem in der Anfrage angegebenen Schlüssel antwortet. Inhalte mit mehreren Schlüsseln können mit dieser Lizenzserverkonfiguration wiedergegeben werden, indem beim Erstellen des Medienelements true an MediaItem.DrmConfiguration.Builder.setMultiSession übergeben wird.

Wir empfehlen nicht, Ihren Lizenzserver so zu konfigurieren. Für die Wiedergabe von Inhalten mit mehreren Schlüsseln sind zusätzliche Lizenzanfragen erforderlich. Das ist weniger effizient und robust als die oben beschriebene Alternative.

Offlineschlüssel

Ein Offlineschlüsselsatz kann geladen werden, indem beim Erstellen des Medienelements die Schlüsselsatz-ID an MediaItem.DrmConfiguration.Builder.setKeySetId übergeben wird. So ist die Wiedergabe mit den Schlüsseln möglich, die im Offline-Schlüsselsatz mit der angegebenen ID gespeichert sind.

DRM-Sitzungen für nicht geschützte Inhalte

Durch die Verwendung des Platzhalters DrmSessions kann ExoPlayer dieselben Decoder für unverschlüsselte Inhalte verwenden, die auch bei der Wiedergabe verschlüsselter Inhalte verwendet werden. Wenn Medien sowohl unverschlüsselte als auch verschlüsselte Abschnitte enthalten, solltest du den Platzhalter DrmSessions verwenden, um das erneute Erstellen von Decodern zu vermeiden, wenn Übergänge zwischen unverschlüsselten und verschlüsselten Abschnitten auftreten. Die Verwendung des Platzhalters DrmSessions für Audio- und Videotracks kann aktiviert werden, indem beim Erstellen des Medienelements true an MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks übergeben wird.

Benutzerdefinierten DrmSessionManager verwenden

Wenn eine App die für die Wiedergabe verwendete DrmSessionManager anpassen möchte, kann sie eine DrmSessionManagerProvider implementieren und an die MediaSource.Factory übergeben, die beim Erstellen des Players verwendet wird. Der Anbieter kann festlegen, ob jedes Mal eine neue Managerinstanz instanziiert werden soll oder nicht. So verwenden Sie immer dieselbe Instanz:

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);

Wiedergabeleistung verbessern

Wenn bei der Wiedergabe von DRM-geschützten Inhalten auf einem Gerät mit einer Android-Version von Android 6.0 (API-Level 23) bis einschließlich Android 11 (API-Level 30) Videos stocken, kannst du die asynchrone Zwischenspeicherwarteschlange aktivieren.