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.
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