Migrer vers Web Receiver

Ce guide explique comment migrer une application Cast Receiver v2 vers la dernière version du Web Application réceptrice.

Le nouveau SDK CAF (Cast Application Framework), également appelé Web Receiver v3, une mise à niveau majeure du SDK Receiver v2. Le SDK Web Receiver fournit une un SDK simplifié et facile à utiliser pour développer des applications Web Receiver multimédias.

Web Receiver fournit une API plus cohérente avec le nouvel expéditeur CAF API. Il offre une intégration complète d'un lecteur (MPL et Shaka) et implémentation et compatibilité des contenus multimédias Cast et de l'Assistant Google commandes vocales. Le SDK CAF fournit également une UI par défaut à laquelle vous pouvez facilement styliser à l'aide de CSS et un service de liaison de données pour simplifier l'implémentation de l'interface utilisateur.

Pourquoi migrer ?

En migrant une application Récepteur v2 vers Web Receiver, une grande partie du code avec le lecteur peuvent être éliminés, ce qui vous permet de vous concentrer sur l'écriture une logique métier spécifique à l'application.

CAF intègre parfaitement les lecteurs MPL et Shaka pour prendre en charge un plus large éventail de types de contenus, y compris les flux HTTP en direct (TS et CMAF), MPEG-DASH, Lisses Diffusions et types pris en charge par la propriété source Élément multimédia (MP3, MP4, Icecast, etc.). Pour obtenir la liste complète, consultez la page Contenus multimédias compatibles avec Google Cast. Actuellement, CAF n'est pas compatible avec les lecteurs fournis par l'utilisateur.

Migrer vers CAF ajoutera la prise en charge des commandes vocales avec l'Assistant Google. Toute nouvelle commande vocale de l'Assistant Google sera automatiquement prise en charge lorsque à l'aide de CAF.

En plus de la prise en charge de nouvelles commandes multimédias, telles que "changer les pistes par langue" ou "Modifier la vitesse de lecture". CAF intègre aussi des annonces mieux placées en file d'attente et une meilleure assistance en direct.

Nouveautés

L'API Web Receiver essaie de suivre les conventions introduites par Expéditeurs CAF pour Android et iOS et est assez différent de celui de la v2.

Web Receiver utilise un nouvel espace de noms cast.framework au lieu de l'espace de noms cast.receiver pour toutes les API exposées. Un grand nombre de les objets de données utilisés par la version 2 sont les mêmes dans CAF et sont exposés la cast.framework.messages (pour la plupart, ils se trouvaient sous cast.receiver.media).

Les services v2 suivants sont remplacés par les services CAF correspondants:

  • La classe CastReceiverManager est remplacée par CastReceiverContext qui est un Singleton qui gère la session Cast, les expéditeurs, l'envoi les messages et les événements système globaux. La CastReceiverOptions peut servir à fournir des options d'application globales (comme les options de file d'attente, de récepteur la version, la configuration de lecture, etc.) au contexte.
  • La classe MediaManager est remplacée par PlayerManager qui est une propriété CastReceiverContext singleton, et gère la session multimédia, les demandes multimédias, Demandes vocales à l'Assistant (CommandAndControlManager dans la v2), et déclenche des événements médiatiques. Configuration pour les joueurs (cast.player.api.Host en MPL) est fournie par PlaybackConfig, qui peuvent être fournis globalement ou par requête de chargement.

PlayerManager expose également les nouvelles classes d'administrateurs secondaires:

const context = cast.framework.CastReceiverContext.getInstance();
const playerManager = context.getPlayerManager();

// Set global options.
const options = new cast.framework.CastReceiverOptions();
options.versionCode = DEVELOPERS_APP_VERSION;

context.start(options);

Logique métier du destinataire

Gestionnaires d'événements exposés du récepteur v2 (tels que CastReceiverManager.onReady ou MediaManager.onLoad) pour ajouter une logique métier. Dans CAF, les gestionnaires d'événements sont remplacé par des écouteurs d'événements (CastReceiverContext.addEventListener) et les intercepteurs de messages (PlayerManager.setMessageInterceptor). Web Receiver peut avoir plusieurs écouteurs d'événements pour un événement (l'écouteur n'affecte pas l'événement) et un intercepteur par message. L'intercepteur peut mettre à jour la requête ou la gérer (afficher une requête modifiée, une requête réussie message ou message d'erreur), et il peut s'agir d'un gestionnaire asynchrone qui renvoie une promesse.

L'intercepteur de requêtes de chargement est l'endroit le plus courant pour ajouter logique spécifique à l'application. Pour les requêtes de chargement provenant d'un expéditeur, la valeur peut convertir l'ID de contenu en URL de contenu. L'intercepteur de charge est également appelé pour les requêtes de préchargement et de pré-cache en l'absence d'intercepteur explicite a été fournie pour le préchargement ou la pré-cache.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD,
    request => {
      // Resolve entity to content id
      if (request.media.entity && !request.media.contentId) {
        return getMediaByEntity(request.media.entity).then(
            media => {
              request.media.contentId = media.url;
              return request;
            });
      }
      return request;
    });

Le gestionnaire d'état des supports personnalisés v2 est également remplacé par un message pour le message d'état du média. Applications Web Receiver qui ne souhaitent pas exposer l'URL du contenu multimédia dans l'état du contenu peut fournir un résolveur d'URL ; (PlayerManager.setMediaUrlResolver), qui fournit l'URL du média pour une requête de chargement. Cette URL est utilisée par la CAF en interne et n'est pas indiquée dans l'état du média.

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.MEDIA_STATUS,
    status => {
      // Disable seek.
      status.supportedMediaCommands &=
          ~cast.framework.messages.Command.SEEK
      return status;
    });

Événements

Web Receiver fournit un ensemble complet d'événements provenant CastReceiverContext et PlayerManager Les applications Web Receiver peuvent avoir plusieurs écouteurs pour tout événement. peut également fournir un écouteur pour plusieurs événements. (Voir cast.framework.events.category pour certains groupes d'événements.)

Ces événements couvrent toute requête de l'utilisateur, la progression de la lecture, le traitement du lecteur événement d'élément multimédia de bas niveau (CAF n'expose pas l'élément multimédia lui-même).

L'application Récepteur Web peut ajouter des écouteurs d'événements sur lesquels agir (par exemple, ajouter du texte suit la définition une fois le chargement terminé) ou à des fins d'analyse.

// Log all media commands
playerManager.addEventListener(
    cast.framework.events.category.REQUEST,
    event => logEvent(event.type));

Service de messagerie personnalisé

CAF n'expose pas le bus de messages dans l'API, mais fournit CastReceiverContext.addCustomMessageListener d'ajouter un écouteur de messages pour un espace de noms spécifique (un seul par espace de noms) ; CastReceiverContext.sendCustomMessage pour envoyer un message sur un espace de noms. Tous les espaces de noms doivent être déclarés avant démarrer Web Receiver (c'est-à-dire, avant d'appeler CastReceiverContext.start). Les espaces de noms peuvent être déclarés en leur ajoutant un écouteur de message ou comme option de démarrage CastReceiverOptions.customNamespaces

const options = new cast.framework.CastReceiverOptions();
options.customNamespaces = {
    CUSTOM_NS: cast.framework.system.MessageType.JSON
};
context.start(options);

context.sendCustomMessage(CUSTOM_NS, {
  type: 'status'
  message: 'Playing'
});

Interface utilisateur par défaut

CAF fournit une interface utilisateur Web Receiver par défaut qui affiche une barre de progression de la lecture et des métadonnées multimédias selon les besoins. L'interface utilisateur par défaut est fournie sous la forme d'un élément personnalisé (<cast-media-player>) qui peuvent être stylisées avec des styles CSS.

<style>
   cast-media-player { --splash-image: url("splash.png"); }
</style>
<cast-media-player></cast-media-player>

Pour plus de personnalisation, une application Web Receiver peut implémenter sa propre interface utilisateur. La Web Receiver fournit cast.framework.ui.PlayerDataBinder pour lier un objet UI à l'état de lecture du récepteur Web.