ExoPlayer utilizza l'API MediaDrm
di Android per supportare la riproduzione con protezione DRM.
Le versioni minime di Android richieste per i diversi schemi DRM supportati, oltre
con i formati di streaming per cui sono supportati, vengono descritti nel
tabella seguente:
Schema DRM | Numero di versione di Android | Livello API Android | Formati supportati: |
---|---|---|---|
"cenc" Widevine | 4,4 | 19 | DASH, HLS (solo FMP4) |
"cbcs" Widevine | 7.1 | 25 | DASH, HLS (solo FMP4) |
ClearKey "cenc" | 5,0 | 21 | PANORAMICA |
"cenc" PlayReady SL2000 | Android TV | Android TV | DASH, Streaming fluido, HLS (solo FMP4) |
Per riprodurre contenuti protetti da DRM con ExoPlayer, l'UUID di DRM
è necessario specificare il sistema
durante la creazione di un elemento multimediale e altre
possono essere fornite. Il player utilizzerà quindi queste proprietà per
creare un'implementazione predefinita di DrmSessionManager
,
DefaultDrmSessionManager
, sono adatti alla maggior parte dei casi d'uso. Per uso limitato
in questi casi, potrebbero essere necessarie ulteriori proprietà DRM, come descritto
sezioni.
Rotazione della chiave
Per riprodurre gli stream con i tasti rotanti, passa true
a
MediaItem.DrmConfiguration.Builder.setMultiSession
durante la creazione dei contenuti multimediali
molto utile.
Contenuti con più chiavi
I contenuti con più chiavi sono costituiti da più stream, alcuni dei quali utilizzano diversi di altre chiavi. I contenuti con più tasti possono essere riprodotti in due modi, a seconda sulla configurazione del server di licenze.
Caso 1: il server di licenze risponde con tutte le chiavi per i contenuti
In questo caso, il server di licenze è configurato in modo che quando riceve un richiesta una chiave, risponde con tutte le chiavi per i contenuti. Questo caso è gestito da ExoPlayer senza la necessità di alcuna configurazione speciale. Adattamento tra gli stream (ad es. i video SD e HD) non presenta interruzioni anche se vengono utilizzati chiave.
Se possibile, consigliamo di configurare il server di licenze in modo che funzioni in molti modi diversi. È il modo più efficiente ed efficace per supportare la riproduzione di tasti contenuti, perché non richiede al client di effettuare più richieste di licenza. per accedere ai diversi stream.
Caso 2: il server di licenze risponde solo con la chiave richiesta
In questo caso, il server di licenze è configurato in modo da rispondere solo con la chiave
specificato nella richiesta. I contenuti con più chiavi possono essere riprodotti con questa licenza
configurazione del server passando true
MediaItem.DrmConfiguration.Builder.setMultiSession
durante la creazione dei contenuti multimediali
molto utile.
Consigliamo di non configurare il server di licenze in modo che si comporti in questo modo. it richiede richieste di licenza aggiuntive per riprodurre contenuti con più chiavi, il che è inferiore efficiente e solido rispetto all'alternativa descritta sopra.
Chiavi offline
È possibile caricare un set di chiavi offline passando l'ID del set di chiavi a
MediaItem.DrmConfiguration.Builder.setKeySetId
durante la creazione dell'elemento multimediale.
Ciò consente la riproduzione utilizzando i tasti memorizzati nella chiave offline impostata con
l'ID specificato.
Sessioni DRM per contenuti chiari
L'utilizzo del segnaposto DrmSessions
consente a ExoPlayer
di usare gli stessi decoder per
cancella i contenuti così come vengono utilizzati durante la riproduzione dei contenuti criptati. Se i contenuti multimediali contengono
sia le sezioni chiare che criptate, potresti usare il segnaposto DrmSessions
per evitare la ricreazione dei decoder durante le transizioni tra chiaro e criptato
in cui vengono eseguite le sezioni. L'utilizzo del segnaposto DrmSessions
per le tracce audio e video può
essere abilitato passando true
a
MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks
quando
creando l'elemento multimediale.
Utilizzo di un DrmSessionManager personalizzato
Se un'app vuole personalizzare il DrmSessionManager
usato per la riproduzione, può
implementare un DrmSessionManagerProvider
e passarlo al
MediaSource.Factory
, che viene utilizzato per la creazione del player. Il fornitore può
scegliere se creare un'istanza di una nuova istanza del gestore ogni volta. A sempre
utilizza la stessa istanza:
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);
Miglioramento delle prestazioni di riproduzione
Se il video si interrompe durante la riproduzione di contenuti protetti da DRM su una dispositivo con qualsiasi versione di Android a partire da Android 6.0 (livello API 23) fino al incluso Android 11 (livello API 30), puoi provare ad abilitare il buffer asincrono in coda.