Digitale Rechteverwaltung

ExoPlayer verwendet die MediaDrm API von Android, um die DRM-geschützte Wiedergabe zu unterstützen. Die Android-Mindestversionen, die für verschiedene unterstützte DRM-Schemas erforderlich sind, sowie und den unterstützten Streamingformaten finden Sie in der folgende Tabelle:

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 DRM-geschützte Inhalte mit ExoPlayer wiedergegeben werden können, muss die UUID der DRM System muss angegeben werden beim Erstellen eines Medienelements und andere können ebenfalls angegeben werden. Anhand dieser Eigenschaften kann der Player eine Standardimplementierung von DrmSessionManager mit dem Namen DefaultDrmSessionManager, der für die meisten Anwendungsfälle geeignet ist. Für bestimmte Anwendungsfälle sind möglicherweise zusätzliche DRM-Eigenschaften erforderlich, wie im Folgenden beschrieben. .

Schlüsselrotation

Um Streams mit rotierenden Schlüsseln wiederzugeben, übergeben Sie true an MediaItem.DrmConfiguration.Builder.setMultiSession beim Erstellen der Medien ein.

Multi-Key-Inhalte

Multi-Key-Inhalte bestehen aus mehreren Streams, wobei manche Streams unterschiedliche als andere Schlüssel. Multi-Key-Inhalte können auf zwei Arten wiedergegeben werden, je nachdem, zur Konfiguration des Lizenzservers.

Fall 1: Der Lizenzserver antwortet mit allen Schlüsseln für den Inhalt

In diesem Fall ist der Lizenzserver so konfiguriert, dass beim Empfang einer für einen Schlüssel sucht, antwortet er mit allen Schlüsseln für den Inhalt. Dieser Fall ist die von ExoPlayer verarbeitet werden, ohne eine spezielle Konfiguration. Anpassung zwischen Streams (z.B. SD- und HD-Video) nahtlos übertragen werden, auch wenn sie unterschiedliche Schlüssel.

Wenn möglich, empfehlen wir, den Lizenzserver so zu konfigurieren, dass er in dieser Dies ist die effizienteste und stabilste Möglichkeit, die Wiedergabe von Multikey-Tasten zu unterstützen. da der Client nicht mehrere Lizenzanfragen stellen muss. um auf die verschiedenen Streams zuzugreifen.

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

In diesem Fall ist der Lizenzserver so konfiguriert, dass er nur mit dem Schlüssel antwortet die in der Anfrage angegeben sind. Multi-Key-Inhalte können mit dieser Lizenz wiedergegeben werden Serverkonfiguration hinzufügen, indem Sie true an MediaItem.DrmConfiguration.Builder.setMultiSession beim Erstellen der Medien ein.

Wir raten davon ab, Ihren Lizenzserver für dieses Verhalten zu konfigurieren. Es erfordert zur Wiedergabe von Multi-Key-Inhalten zusätzliche Lizenzanfragen, als die oben beschriebene Alternative.

Offlineschlüssel

Ein Offline-Schlüsselsatz kann geladen werden, indem die Schlüsselsatz-ID an MediaItem.DrmConfiguration.Builder.setKeySetId beim Erstellen des Medienelements. Dies ermöglicht die Wiedergabe mit den Schlüsseln, die im Offlineschlüsselsatz mit der die angegebene ID enthält.

<ph type="x-smartling-placeholder">

Sitzungen zur digitalen Rechteverwaltung zur Vermeidung von klaren Inhalten

Durch die Verwendung des Platzhalters „DrmSessions“ kann ExoPlayer dieselben Decoder für die bei der Wiedergabe verschlüsselter Inhalte verwendet werden. Wenn Medieninhalte enthalten klare und verschlüsselte Bereiche enthalten, können Sie den Platzhalter DrmSessions um zu vermeiden, dass der Decoder bei einem Wechsel zwischen unverschlüsselt und verschlüsselt ist. -Abschnitte auftreten. Die Verwendung des Platzhalters DrmSessions für Audio- und Videotracks kann kann aktiviert werden, indem true an MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks wenn der Erstellung des Medienelements.

Benutzerdefinierten DrmSessionManager verwenden

Wenn eine App die DrmSessionManager für die Wiedergabe anpassen möchte, kann sie ein DrmSessionManagerProvider implementieren und dies an den MediaSource.Factory, das beim Erstellen des Players verwendet wird. Der Anbieter kann legen Sie fest, ob jedes Mal eine neue Managerinstanz instanziiert werden soll. Immer verwenden Sie 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 mit einer beliebigen Android-Version ab Android 6.0 (API-Level 23) bis und einschließlich Android 11 (API-Level 30), können Sie versuchen, den asynchronen Zwischenspeicher zu aktivieren Wiedergabeliste