Google Cast pour Chrome sur Android

Imaginez pouvoir utiliser une application Web sur votre téléphone pour présenter une présentation à un projecteur de conférence (ou partager des images, jouer à des jeux ou regarder des vidéos sur l'écran d'un téléviseur) en utilisant l'application Web mobile comme manette.

La dernière version de Chrome sur Android permet aux sites de présenter du contenu sur des appareils Google Cast à l'aide du SDK Web Cast. Autrement dit, vous pouvez désormais créer des applications émettrices Cast à l'aide du SDK Web avec Chrome pour Android ou iOS (ou sur ordinateur avec l'extension). Vous pouvez aussi créer des applications qui utilisent le SDK Cast natif pour Android et iOS. (Auparavant, une application émettrice Google Cast nécessitait l'extension Chrome Google Cast. Sous Android, il n'était donc possible d'interagir qu'avec les appareils Cast à partir d'applications natives.

Vous trouverez ci-dessous une brève présentation de la création d'une application émettrice Cast à l'aide du SDK Web. Des informations plus complètes sont disponibles dans le guide de développement de l'application pour les expéditeurs Chrome.

Toutes les pages qui utilisent Cast doivent inclure la bibliothèque Cast:

<script
  type="text/javascript"
  src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js"
></script>

Ajoutez un rappel pour gérer la disponibilité de l'API et initialiser la session Cast (en veillant à ajouter le gestionnaire avant le chargement de l'API):

window['__onGCastApiAvailable'] = function (isLoaded, error) {
  if (isLoaded) {
    initializeCastApi();
  } else {
    console.log(error);
  }
};

function initializeCastApi() {
  var sessionRequest = new chrome.cast.SessionRequest(applicationID);
  var apiConfig = new chrome.cast.ApiConfig(
    sessionRequest,
    sessionListener,
    receiverListener
  );
  chrome.cast.initialize(apiConfig, onInitSuccess, onError);
}

Si vous utilisez l'application de récepteur multimédia stylisé par défaut et non une application de récepteur personnalisé enregistrée et personnalisée, vous pouvez créer un SessionRequest comme ceci:

var sessionRequest = new chrome.cast.SessionRequest(chrome.cast.media.
  DEFAULT_MEDIA_RECEIVER_APP_ID);

Le rappel receiverListener ci-dessus est exécuté lorsqu'un ou plusieurs appareils deviennent disponibles:

function receiverListener(e) {
  if (e === chrome.cast.ReceiverAvailability.AVAILABLE) {
    // update UI
  }
}

Lancez une session Cast lorsque l'utilisateur clique sur l'icône Cast, comme l'exigent les Consignes relatives à l'expérience utilisateur:

chrome.cast.requestSession(onRequestSessionSuccess,
    onRequestSessionError);

function onRequestSessionSuccess(e) {
  session = e;
}

Un sélecteur d'appareil s'affiche:

Boîte de dialogue de sélection de l&#39;appareil Cast

La boîte de dialogue Détails de l'itinéraire s'affiche lorsque la page est déjà connectée et appelle requestSession():

Boîte de dialogue des détails de l&#39;itinéraire Cast

Une fois que vous avez lancé une session de diffusion, vous pouvez charger des contenus multimédias pour l'appareil Cast sélectionné et ajouter un écouteur pour les événements de lecture de contenus multimédias:

var mediaInfo = new chrome.cast.media.MediaInfo(mediaURL);
var request = new chrome.cast.media.LoadRequest(mediaInfo);
session.loadMedia(
  request,
  onMediaDiscovered.bind(this, 'loadMedia'),
  onMediaError
);

function onMediaDiscovered(how, media) {
  currentMedia = media;
  media.addUpdateListener(onMediaStatusUpdate);
}

Ici, la variable currentMedia est un objet chrome.cast.media.Media, qui peut être utilisé pour contrôler la lecture:

function playMedia() {
  currentMedia.play(null, success, error);
}


    // ...

Une notification de lecture/pause s'affiche lorsque du contenu multimédia est en cours de lecture:

Caster la notification lecture/pause.

Si aucun contenu multimédia n'est en cours de lecture, la notification comporte uniquement un bouton d'arrêt. Pour arrêter la diffusion:

Notification d&#39;arrêt de la diffusion

Le rappel sessionListener pour chrome.cast.ApiConfig() (voir ci-dessus) permet à votre application de rejoindre ou de gérer une session Cast existante:

function sessionListener(e) {
  session = e;
  if (session.media.length !== 0) {
    onMediaDiscovered('onRequestSessionSuccess', session.media[0]);
  }
}

Si Chrome sur Android autorise la diffusion de contenus multimédias depuis votre site Web, mais que vous souhaitez désactiver cette fonctionnalité afin que l'interface utilisateur par défaut de diffusion n'interfère pas avec la vôtre, utilisez l'attribut disableRemotePlayback, disponible dans Chrome 49 et versions ultérieures:

<video disableRemotePlayback src="..."></video>

Autres appareils émetteurs et récepteurs

Le guide du SDK Cast pour le Web contient des liens vers des exemples d'applications, ainsi que des informations sur les fonctionnalités Cast, telles que la gestion des sessions, les pistes de texte (pour les sous-titres) et les mises à jour de l'état.

À l'heure actuelle, vous ne pouvez présenter du contenu dans une application réceptrice Cast qu'à l'aide du SDK Web Cast. Toutefois, nous travaillons actuellement à l'activation de l'API Slides afin de pouvoir l'utiliser sans le SDK Cast (sur ordinateur et Android) afin de présenter une page Web sur un appareil Cast sans enregistrement auprès de Google. Contrairement au SDK Cast disponible uniquement pour Chrome, l'utilisation de l'API standard permet à la page de fonctionner avec d'autres user-agents et appareils compatibles avec l'API.

L'API Presentation, ainsi que l'API Remote Playback, fait partie de l'initiative Second Screen Working Group visant à permettre aux pages Web d'utiliser des deuxièmes écrans pour afficher du contenu Web.

Ces API exploitent la gamme d'appareils mis en ligne, y compris les écrans connectés qui exécutent un user-agent, pour activer une grande variété d'applications avec un appareil de contrôle et un appareil d'affichage.

Nous vous tiendrons informé de l'avancement de la mise en œuvre.

En attendant, n'hésitez pas à nous contacter si vous détectez des bugs ou si vous souhaitez demander des fonctionnalités: crbug.com/new.

En savoir plus