Questo documento fornisce una panoramica dell'accodamento e dell'integrazione di DRM. assistenza in tempo reale.
Miglioramenti al DRM
La demo di Cast di ExoPlayer
è stato aggiornato in modo da utilizzare un metodo strutturato per trasmettere la configurazione DRM utilizzando
MediaInfo
di ExoPlayer a un'applicazione ricevitore. L'esempio di Cast
utilizza anche un ricevitore demo che include lo stesso codice in questa panoramica,
di testare il supporto DRM. Tuttavia, se desideri che la trasmissione sia protetta da DRM
contenuti, dovresti creare e ospitare i tuoi
Web receiver (Ricevitore web).
Prima di iniziare, sarebbe utile acquisire familiarità con documentazione sul supporto DRM Google Cast ed ExoPlayer. Questa panoramica ti mostra come per collegare la configurazione DRM di ExoPlayer a un ricevitore web. Per informazioni sull'utilizzo di DRM in ExoPlayer, consulta il Sito web di ExoPlayer.
Fornire la configurazione DRM
L'app demo ExoPlayer contiene un codice campione che mostra come fornire DRM configurazione come parte di MediaItem. Le quattro opzioni che puoi configurare sono:
- Intestazioni: un dizionario di intestazioni applicate alla richiesta HTTPS a recuperare la licenza DRM.
- URL licenza: l'URL utilizzato per acquisire la licenza.
- Protection System: lo schema di protezione DRM utilizzato per proteggere i contenuti; come Widevine.
La configurazione DRM che fornisci a ExoPlayer viene inviata al tuo ricevitore
l'applicazione come proprietà in customData
in MediaInformation
come parte di una richiesta di caricamento. Per impostazione predefinita, questa proprietà è
exoPlayerConfig
, che corrisponde alla definizione riportata di seguito.
/**
* Extended configuration settings for ExoPlayer.
*/
ExoPlayerConfig class {
constructor() {
/**
* Dictionary of headers to apply to the license request.
* @type {!Object|undefined}
*/
this.headers;
/**
* The URL for your DRM server.
* @type {string|undefined}
*/
this.licenseUrl;
/**
* Preferred protection system to use for decrypting content.
* @type {!cast.framework.ContentProtection|undefined}
*/
this.protectionSystem;
/**
* Indicates whether CORS Access-Control requests should be made using
* credentials such as cookies or authorization headers.
*
* If withCredentials is set to true then Access-Control-Allow-Origin cannot
* be set to '*'.
* @type {boolean|undefined}
*/
this.withCredentials;
}
}
Configurazione iniziale
A seconda della soluzione DRM che utilizzi, potrebbe essere necessario configurare un licenseRequestHandler
e un mediaPlaybackInfoHandler
. licenseRequestHandler
ti consente di personalizzare
il modo in cui CAF richiede una licenza al server delle chiavi di licenza. La
mediaPlaybackInfoHandler
consente di modificare
PlaybackConfig
in base agli elementi multimediali se, ad esempio, ogni contenuto deve utilizzare un
un URL del server licenze diverso.
Per acquisire una copia di ExoPlayerConfig
da ciascun oggetto della richiesta di caricamento, crea
un intercettatore della richiesta di carico nella tua applicazione SDK WebRicevir.
Il primo passaggio consiste nel registrare i tuoi gestori prima di avviare la trasmissione un'applicazione.
const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.licenseRequestHandler =
licenseRequestHandler;
context.getPlayerManager().setMediaPlaybackInfoHandler(
mediaPlaybackInfoHandler);
context.getPlayerManager().setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
loadInterceptor);
// starts the Cast application
context.start({playbackConfig: playbackConfig});
Intercettore richieste di carico
L'intercettatore della richiesta di carico è un callback che ti consente di visualizzare e modificare Richiesta di caricamento della trasmissione prima che il CAF tenti di caricare un elemento multimediale. È importante prima del gestore della richiesta di licenza e del gestore delle informazioni sulla riproduzione dei contenuti multimediali.
L'intercettatore della richiesta di carico ha superato un LoadRequestData
contenente l'Exo Player Config inviata dall'app. Puoi
salva questo oggetto come variabile globale da utilizzare nel gestore delle richieste di licenza
e gestore delle informazioni
sulla riproduzione di contenuti multimediali.
loadInterceptor(loadRequestData) {
// not every load request will have a customData object
if (loadRequestData.media && loadRequestData.media.customData &&
loadRequestData.media.customData['exoPlayerConfig']) {
// exoPlayerConfig is a global variable here
exoPlayerConfig =
loadRequestData.media.customData['exoPlayerConfig'];
}
// you must return the loadRequestData object
return loadRequestData;
}
Gestore richieste di licenza
Il gestore delle richieste di licenza ti consente di personalizzare la richiesta HTTPS sul web
Il ricevitore invia al server di licenze. Al gestore viene trasmesso un parametro NetworkRequestInfo
che potrai utilizzare per aggiungere intestazioni HTTP, includere cookie
modificare l'URL. Il gestore deve restituire questo oggetto.
Se, ad esempio, dovevi aggiungere intestazioni personalizzate alla tua richiesta di licenza, potresti creare un gestore di richieste di licenza simile a questo:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
Gestore delle informazioni sulla riproduzione dei contenuti multimediali
Il gestore delle informazioni sulla riproduzione dei contenuti multimediali ti consente di apportare modifiche alla tua riproduzione
configurazione in base agli elementi multimediali. Al gestore viene trasmesso un parametro LoadRequestData
e PlaybackConfig
,
dovresti restituire una configurazione di riproduzione. Il gestore delle informazioni
sulla riproduzione dei contenuti multimediali
prima che venga caricato ogni elemento che trasmetti. Se avevi URL di licenza per contenuti,
e il sistema di protezione prima del caricamento.
mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
if (!exoPlayerConfig) {
return;
}
playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
exoPlayerConfig.licenseUrl :
undefined;
playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
exoPlayerConfig.protectionSystem :
undefined;
return playbackConfig;
}
Ulteriori risorse
Ogni implementazione DRM è personalizzata e questo codice viene fornito a titolo dimostrativo . Consulta il tuo fornitore di DRM per assicurarti di avere implementato DRM nelle tue applicazioni ExoPlayer e Cast.
Documentazione aggiornata sulle funzionalità del sito web di ExoPlayer e annunci. È possibile che si verifichino problemi con ExoPlayer e la sua integrazione Cast segnalato sul GitHub di ExoPlayer repository Git.