Gestione dei diritti digitali

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.