Ce guide du développeur explique comment rendre votre application compatible avec Google Cast Application émettrice utilisant le SDK Cast
Terminologie
L'appareil mobile ou le navigateur est l'expéditeur, lequel contrôle la lecture. L'appareil Google Cast est le récepteur. C'est lui qui affiche le contenu l'écran pour la lecture.
Le SDK Web Sender se compose de deux parties: l'API Framework (cast.framework) et l'API Base (chrome.cast) En général, vous effectuez des appels sur l'API Framework, plus simple et de niveau supérieur, qui sont ensuite traités par l'API Base de niveau inférieur.
Le framework expéditeur fait référence à l'API Framework, au module et aux ressources qui fournissent un wrapper aux fonctionnalités de niveau inférieur. La L'application émettrice ou l'application Chrome Google Cast font référence à une application Web (HTML/JavaScript). exécutés dans un navigateur Chrome sur un appareil émetteur. Une application Web Receiver fait référence à une application HTML/JavaScript exécutée sur un appareil Chromecast ou Google Cast.
Le framework de l'expéditeur utilise une conception de rappel asynchrone pour informer l'expéditeur application d'événements et de transition entre différents états de l'application Cast d'un cycle.
Charger la bibliothèque
Pour que votre application mette en œuvre les fonctionnalités de Google Cast, elle doit connaître la l'emplacement du SDK de l'expéditeur Web Google Cast, comme indiqué ci-dessous. Ajoutez le Paramètre de requête d'URL loadCastFramework pour charger l'API Web Sender Framework . Toutes les pages de votre application doivent faire référence à la bibliothèque, comme suit:
<script src="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"></script>
Framework
Le SDK Web Sender utilise cast.framework.* espace de noms. L'espace de noms représente les éléments suivants:
- Méthodes ou fonctions qui appellent des opérations sur l'API
- Écouteurs d'événements pour les fonctions d'écouteur dans l'API
Le framework comprend les composants principaux suivants:
CastContext
est un objet singleton qui fournit des informations l'état Cast actuel et déclenche des événements pour l'état Cast et la session Cast. les changements d'état.CastSession
gère la session et fournit l'état des informations et des événements déclencheurs, tels que des variations du volume de l'appareil, le mode silencieux et les métadonnées de l'application.- L'icône Cast, qui est un élément HTML personnalisé simple développe le bouton HTML. Si l'icône Cast fournie ne suffit pas, vous pouvez utiliser l'état Cast pour implémenter une icône Cast.
RemotePlayerController
fournit la liaison de données pour simplifier l'implémentation du lecteur distant.
Consultez les la documentation de référence de l'API Google Cast Web Sender pour obtenir une description complète de l'espace de noms.
Icône Cast
Le composant de l'icône Cast de votre application est entièrement géré par le framework. Ce inclut la gestion de la visibilité ainsi que la gestion des événements de clic.
<google-cast-launcher></google-cast-launcher>
Vous pouvez également créer le bouton par programmation:
document.createElement("google-cast-launcher");
Vous pouvez appliquer un style supplémentaire, comme la taille ou le positionnement, à la
l'élément si nécessaire. Utilisez l'attribut --connected-color
pour
choisir la couleur de l'état du récepteur Web connecté ;
--disconnected-color
pour l'état déconnecté.
Initialisation
Après avoir chargé l'API du framework, l'application appelle le gestionnaire
window.__onGCastApiAvailable
Vous devez vous assurer que l'application définit ce gestionnaire
sur le window
avant de charger la bibliothèque de l'expéditeur.
Dans ce gestionnaire, vous initialisez l'interaction Cast en appelant la méthode
setOptions(options)
méthode de
CastContext
Exemple :
<script>
window['__onGCastApiAvailable'] = function(isAvailable) {
if (isAvailable) {
initializeCastApi();
}
};
</script>
Ensuite, initialisez l'API comme suit:
initializeCastApi = function() {
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: applicationId,
autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED
});
};
L'application commence par récupérer l'instance du singleton du
Objet CastContext
fournies par le framework. Il utilise ensuite
setOptions(options)
à l'aide d'un
Objet CastOptions
pour définir applicationID
.
Si vous utilisez le récepteur média par défaut, qui ne nécessite pas d'inscription,
vous utilisez une constante prédéfinie par le SDK Web Sender, comme indiqué ci-dessous, au lieu de
le applicationID
:
cast.framework.CastContext.getInstance().setOptions({
receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID
});
Commande multimédia
Une fois que CastContext
a été initialisée, l'application peut récupérer
CastSession
à tout moment
temps avec
getCurrentSession()
var castSession = cast.framework.CastContext.getInstance().getCurrentSession();
Le CastSession
peut être utilisé pour charger des contenus multimédias sur l'appareil Cast connecté à l'aide de
loadMedia(loadRequest)
Tout d'abord, créez un
MediaInfo
en utilisant contentId
et contentType
, ainsi que toute autre information
en rapport avec le contenu. Créez ensuite un
LoadRequest
en définissant toutes les informations
pertinentes pour la demande. Enfin,
appelez loadMedia(loadRequest)
sur votre CastSession
.
var mediaInfo = new chrome.cast.media.MediaInfo(currentMediaURL, contentType);
var request = new chrome.cast.media.LoadRequest(mediaInfo);
castSession.loadMedia(request).then(
function() { console.log('Load succeed'); },
function(errorCode) { console.log('Error code: ' + errorCode); });
La méthode loadMedia
renvoie une
Promise
qui peut être utilisé pour effectuer toutes les opérations
nécessaires pour obtenir un résultat réussi.
Si la promesse est rejetée, l'argument de la fonction est un
chrome.cast.ErrorCode
Vous pouvez accéder aux variables d'état du lecteur
RemotePlayer
Toutes les interactions avec RemotePlayer
, y compris les rappels d'événements multimédias et
sont gérés à l'aide des commandes
RemotePlayerController
var player = new cast.framework.RemotePlayer();
var playerController = new cast.framework.RemotePlayerController(player);
RemotePlayerController
permet à l'application de contrôler entièrement les contenus multimédias
LIRE, PAUSE, ARRÊTER et RECHERCHER pour le contenu multimédia chargé.
- LECTURE/PAUSE:
playerController.playOrPause();
- ARRÊTER:
playerController.stop();
- RECHERCHE:
playerController.seek();
RemotePlayer
et RemotePlayerController
peuvent être
utilisé avec les frameworks de liaison de données, tels que Polymer ou Angular, pour implémenter
à distance.
Voici un extrait de code pour Angular:
<button id="playPauseButton" class="playerButton" ng-disabled="!player.canPause" ng-click="controller.playOrPause()"> {{player.isPaused ? 'Play' : 'Pause'}} </button> <script> var player = new cast.framework.RemotePlayer(); var controller = new cast.framework.RemotePlayerController(player); // Listen to any player update, and trigger angular data binding update.controller.addEventListener( cast.framework.RemotePlayerEventType.ANY_CHANGE, function(event) { if (!$scope.$$phase) $scope.$apply(); }); </script>
État du contenu multimédia
Pendant la lecture d'un contenu multimédia, différents événements se produisent. Vous pouvez les enregistrer en configurant
des écouteurs pour différents
cast.framework.RemotePlayerEventType
des événements du
RemotePlayerController
.
Pour obtenir des informations sur l'état du contenu multimédia, utilisez le
cast.framework.RemotePlayerEventType
.MEDIA_INFO_CHANGED
qui se déclenche lorsque la lecture change et lorsque
CastSession.getMediaSession().media
des modifications.
playerController.addEventListener(
cast.framework.RemotePlayerEventType.MEDIA_INFO_CHANGED, function() {
// Use the current session to get an up to date media status.
let session = cast.framework.CastContext.getInstance().getCurrentSession();
if (!session) {
return;
}
// Contains information about the playing media including currentTime.
let mediaStatus = session.getMediaSession();
if (!mediaStatus) {
return;
}
// mediaStatus also contains the mediaInfo containing metadata and other
// information about the in progress content.
let mediaInfo = mediaStatus.media;
});
Lorsque des événements tels que la pause, la lecture, la reprise ou la recherche se produisent, l'application doit agir et se synchronisent entre elle et l'application Web Receiver sur l'appareil Cast. appareil. Consultez les informations sur l'état. pour en savoir plus.
Fonctionnement de la gestion des sessions
Le SDK Cast introduit le concept de session Cast, établissement qui combine les étapes de connexion à un appareil, de lancement (ou de connexion) à un Web l'application réceptrice, la connexion à cette application et l'initialisation d'un canal de commande multimédia. Voir le récepteur Web Guide sur le cycle de vie des applications pour en savoir plus sur les sessions Cast et le cycle de vie du récepteur Web.
Les sessions sont gérées par la classe
CastContext
que votre application peut récupérer
cast.framework.CastContext.getInstance()
Les sessions individuelles sont représentées par des sous-classes de la classe
Session
Par exemple :
CastSession
représente les sessions avec des appareils Cast. Votre application peut accéder aux paramètres
Caster la session via
CastContext.getCurrentSession()
Pour surveiller l'état de la session, ajoutez un écouteur au paramètre
CastContext
pour
la
CastContextEventType
.SESSION_STATE_CHANGED
type d'événement.
var context = cast.framework.CastContext.getInstance();
context.addEventListener(
cast.framework.CastContextEventType.SESSION_STATE_CHANGED,
function(event) {
switch (event.sessionState) {
case cast.framework.SessionState.SESSION_STARTED:
case cast.framework.SessionState.SESSION_RESUMED:
break;
case cast.framework.SessionState.SESSION_ENDED:
console.log('CastContext: CastSession disconnected');
// Update locally as necessary
break;
}
})
Pour une déconnexion, par exemple lorsque l'utilisateur clique sur le bouton "Arrêter la diffusion" bouton de
dans la boîte de dialogue "Caster", vous pouvez ajouter un écouteur
RemotePlayerEventType
.IS_CONNECTED_CHANGED
dans votre écouteur. Dans votre écouteur, vérifiez si
RemotePlayer
correspond à
déconnectés. Si c'est le cas, mettez à jour l'état du lecteur local si nécessaire. Exemple :
playerController.addEventListener(
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED, function() {
if (!player.isConnected) {
console.log('RemotePlayerController: Player disconnected');
// Update local player to disconnected state
}
});
L'utilisateur peut contrôler directement l'arrêt Cast via le framework Cast.
l'émetteur peut arrêter la diffusion en utilisant
CastSession
.
function stopCasting() {
var castSession = cast.framework.CastContext.getInstance().getCurrentSession();
// End the session and pass 'true' to indicate
// that Web Receiver app should be stopped.
castSession.endSession(true);
}
Transfert de diffusion
La préservation de l'état de la session est la base du transfert de flux, où les utilisateurs peuvent déplacer des flux audio et vidéo existants d'un appareil à un autre à l'aide de commandes vocales, de Google Home des applications ou des écrans connectés. La lecture du contenu multimédia s'arrête sur un appareil (la source) et continue sur un autre (le destination). N'importe quel appareil Cast équipé du dernier micrologiciel peut servir de source ou de destination dans un le transfert de diffusion.
Pour récupérer le nouvel appareil de destination pendant le transfert de diffusion, appelez
CastSession#getCastDevice()
lorsque
cast.framework.SessionState
.SESSION_RESUMED
est appelé.
Voir Transfert de diffusion sur Web Receiver pour en savoir plus.