ExoPlayer utilise l'API MediaDrm
d'Android pour permettre la lecture protégée par DRM.
Les versions minimales d'Android requises pour différents schémas DRM compatibles, ainsi que
avec les formats de streaming pour lesquels ils sont compatibles, sont décrits dans la
tableau suivant:
Système DRM | Numéro de version d'Android | Niveau d'API Android | Formats compatibles |
---|---|---|---|
Widevine "cenc" | 4.4 | 19 | DASH, HLS (FMP4 uniquement) |
"cbcs" Widevine | 7.1 | 25 | DASH, HLS (FMP4 uniquement) |
ClearKey "cenc" | 5,0 | 21 | DASH |
PlayReady SL2000 "cenc" | Android TV | Android TV | DASH, SmoothStreaming, HLS (FMP4 uniquement) |
Pour lire du contenu protégé par DRM avec ExoPlayer, l'UUID de la DRM
système doit être spécifié
lors de la création d'un élément multimédia, et d'autres
les propriétés peuvent également être fournies. Le lecteur utilisera ensuite ces propriétés pour
créer une implémentation par défaut de DrmSessionManager
, appelée
DefaultDrmSessionManager
, qui convient à la plupart des cas d'utilisation. Quelques utilisations
Dans certains cas, des propriétés DRM supplémentaires peuvent être nécessaires, comme indiqué dans les
.
Rotation des clés
Pour lire des flux avec des clés alternées, transmettez true
à
MediaItem.DrmConfiguration.Builder.setMultiSession
lors de la création du contenu multimédia
élément.
Contenu à plusieurs touches
Un contenu doté de plusieurs clés se compose de plusieurs flux, dont certains utilisent différentes clés que d'autres. Le contenu à touches multiples peut être lu de deux manières différentes, en fonction sur la configuration du serveur de licences.
Cas 1: le serveur de licences répond avec toutes les clés pour le contenu
Dans ce cas, le serveur de licences est configuré de sorte que lorsqu'il reçoit une pour une clé, il répond avec toutes les clés pour le contenu. Ce cas est gérés par ExoPlayer sans nécessiter de configuration spéciale. Adaptation entre les flux (par exemple, les vidéos SD et HD) est fluide, même s'ils utilisent des clés.
Dans la mesure du possible, nous vous recommandons de configurer votre serveur de licences afin qu'il se comporte de la même façon. C'est le moyen le plus efficace et le plus robuste pour lire des requêtes multitouches. contenu, car le client n'a pas besoin d'effectuer plusieurs demandes de licence pour accéder aux différents flux.
Scénario 2: le serveur de licences répond uniquement avec la clé demandée
Dans ce cas, le serveur de licences est configuré pour répondre uniquement avec la clé
spécifiées dans la demande. Le contenu à touches multiples peut être lu avec cette licence
la configuration du serveur en transmettant true
à
MediaItem.DrmConfiguration.Builder.setMultiSession
lors de la création du contenu multimédia
élément.
Nous vous déconseillons de configurer votre serveur de licences de cette manière. Il nécessite des demandes de licence supplémentaires pour lire du contenu à plusieurs touches, ce qui réduit plus efficaces et robustes que la solution alternative décrite ci-dessus.
Clés hors connexion
Vous pouvez charger un jeu de clés hors connexion en transmettant l'ID du jeu de clés à
MediaItem.DrmConfiguration.Builder.setKeySetId
lors de la création de l'élément multimédia.
Cela vous permet de lancer la lecture à l'aide des touches stockées dans la touche hors connexion définie à l'aide du bouton
l'identifiant spécifié.
Sessions DRM pour un contenu clair
L'utilisation de l'espace réservé DrmSessions
permet à ExoPlayer
d'utiliser les mêmes décodeurs pour
effacer du contenu de la même façon que lors de la lecture de contenu chiffré. Lorsque le contenu multimédia contient
des sections claires et chiffrées, vous pouvez utiliser l'espace réservé DrmSessions
pour éviter la recréation de décodeurs lors des transitions entre les valeurs claires et chiffrées
se produisent. L'utilisation de l'espace réservé DrmSessions
pour les pistes audio et vidéo peut
être activé en transmettant true
à
MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks
lorsque
la création de l'élément multimédia.
Utiliser un DrmSessionManager personnalisé
Si une application souhaite personnaliser l'DrmSessionManager
utilisée pour la lecture, elle peut
implémenter un DrmSessionManagerProvider
et le transmettre au
MediaSource.Factory
, qui est utilisé lors de la création du lecteur. Le fournisseur peut
choisissez d'instancier une nouvelle instance de gestionnaire à chaque fois ou non. Pour toujours
utilisez la même instance:
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);
Améliorer les performances de lecture
Si la vidéo est saccadée lorsque vous lisez du contenu protégé par DRM sur un appareil exécutant n'importe quelle version d'Android, d'Android 6.0 (niveau d'API 23) à y compris Android 11 (niveau d'API 30), vous pouvez essayer d'activer le tampon asynchrone mise en file d'attente.