Intégration d'ExoPlayer

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.