Ce document fournit un aperçu de la mise en file d'attente et de l'intégration de DRM. de l'assistance.
Améliorations DRM
La démonstration Cast d'ExoPlayer
a été mis à jour pour utiliser un moyen structuré de transmettre la configuration DRM à l'aide de
MediaInfo
d'ExoPlayer vers une application réceptrice. Exemple Cast
utilise également un récepteur de démonstration qui inclut le même code dans cette présentation, ce qui permet
pour tester la prise en charge de DRM. Cependant, si vous souhaitez caster du contenu protégé par DRM,
de votre site, vous devez créer et héberger vos propres
Web Receiver :
Avant de commencer, il peut être utile de vous familiariser avec les sur la prise en charge des DRM Google Cast et ExoPlayer. Cet aperçu vous montre comment pour connecter la configuration DRM d'ExoPlayer à un récepteur Web. Pour plus d'informations sur l'utilisation de DRM dans ExoPlayer, consultez la documentation officielle Site Web ExoPlayer.
Fournir la configuration DRM
L'application de démonstration d'ExoPlayer contient un exemple de code qui montre comment fournir la DRM. dans le cadre d'un MediaItem. Les quatre options que vous pouvez configurer sont les suivantes:
- Headers (En-têtes) : dictionnaire d'en-têtes appliqués à la requête HTTPS récupérer la licence DRM.
- URL de la licence : URL utilisée pour acquérir la licence.
- Système de protection : schéma de protection DRM utilisé pour protéger le contenu par exemple, Widevine.
La configuration DRM fournie à ExoPlayer est envoyée à votre récepteur
application en tant que propriété dans customData
sur le MediaInformation
dans le cadre d'une requête de chargement. Par défaut, cette propriété est appelée
exoPlayerConfig
, qui correspond à la définition suivante.
/**
* 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;
}
}
Configuration initiale
Selon la solution DRM que vous utilisez, vous devrez peut-être configurer un licenseRequestHandler
et un mediaPlaybackInfoHandler
. licenseRequestHandler
vous permet de personnaliser
comment CAF demande une licence
à votre serveur de clés de licence. La
mediaPlaybackInfoHandler
vous permet de modifier
PlaybackConfig
par élément multimédia si, par exemple, chaque contenu doit utiliser
une autre URL de serveur de licences.
Pour capturer une copie de ExoPlayerConfig
à partir de chaque objet de requête de chargement, créez
un intercepteur de requêtes de chargement
dans votre application SDK Web Receiver.
La première étape consiste à enregistrer les gestionnaires avant de démarrer l'exécution de Cast. application.
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});
Interceteur de requêtes de chargement
L'intercepteur de requêtes de chargement est un rappel qui vous permet d'afficher et de modifier un Castez la requête de chargement avant que le fichier CAF tente de charger un élément multimédia. Plus important encore, il est appelé avant le gestionnaire de demande de licence et le gestionnaire d'informations de lecture multimédia.
L'intercepteur de requêtes de chargement reçoit un LoadRequestData
contenant la configuration Exo Player Config envoyée par votre application. Vous pouvez
enregistrez cet objet en tant que variable globale à utiliser dans votre gestionnaire de requêtes de licence
et le gestionnaire d'informations
sur la lecture de contenus multimédias.
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;
}
Gestionnaire de requêtes de licence
Le gestionnaire de requêtes de licence vous permet de personnaliser les requêtes HTTPS
Le destinataire envoie des données à votre serveur de licences. Le gestionnaire reçoit un élément NetworkRequestInfo
.
que vous pouvez utiliser pour ajouter des en-têtes HTTP, inclure des cookies
modifier l'URL. Le gestionnaire doit renvoyer cet objet.
Si, par exemple, vous devez ajouter des en-têtes personnalisés à votre demande de licence, pourrait créer un gestionnaire de demandes de licence semblable à celui-ci:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
Gestionnaire d'informations concernant la lecture de contenus multimédias
Le gestionnaire d'informations concernant la lecture de contenus multimédias vous permet de modifier la lecture
par élément multimédia. Le gestionnaire reçoit un élément LoadRequestData
.
et un PlaybackConfig
,
vous devez renvoyer
une configuration de lecture. Le gestionnaire d'informations concernant la lecture de contenus multimédias
appelé avant le chargement de chaque élément Cast. Si vous aviez des URL de licence par contenu,
les modifier ainsi que le système
de protection avant la charge.
mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
if (!exoPlayerConfig) {
return;
}
playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
exoPlayerConfig.licenseUrl :
undefined;
playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
exoPlayerConfig.protectionSystem :
undefined;
return playbackConfig;
}
Autres ressources
Chaque implémentation DRM est personnalisée, et ce code est fourni à titre de démonstration. uniquement. Nous vous conseillons de consulter votre fournisseur DRM pour vous assurer que vous avez correctement implémenté la DRM dans vos applications ExoPlayer et Cast.
Le site Web d'ExoPlayer présente une documentation à jour. et des annonces. Les problèmes liés à ExoPlayer et à son intégration Cast peuvent sur le site GitHub d'ExoPlayer un dépôt de clés.