Streaming en direct

Le SDK Cast inclut des API intégrées pour assurer la compatibilité du contenu en direct. Cela inclut un Une interface utilisateur flexible et prête à l'emploi, associée à des API qui permettent aux développeurs de créer des expériences en direct avec seulement quelques lignes de code. L'API Live est compatible avec l'affichage les heures de début et de fin, les métadonnées des programmes, les commandes du magnétoscope numérique et les fenêtres de recherche.

Ce guide explique comment configurer un flux pour les API Live, y compris des exemples de code et de métadonnées pour configurer les principaux scénarios de diffusion en direct, ainsi que des captures d'écran montrant à quoi ressemble chaque scénario.

Prérequis

une bonne connaissance des principes de base de la mise en œuvre d'un Web Receiver est requis avant d'examiner ce . De plus, pour exécuter les exemples de code, vous aurez besoin d'un accès à un flux conforme à l'un des types de contenus multimédias compatibles avec Cast. En général, la fonctionnalité "En direct" est compatible avec les configurations de diffusion en direct classiques contenus multimédias compatibles.

Les termes suivants sont utilisés tout au long du guide:

  • Fenêtre de recherche : plage d'une diffusion en direct dans laquelle les utilisateurs peuvent rechercher.
  • Live Edge : la dernière partie d'une diffusion en direct disponible pour le lecteur.
  • Tête de lecture : code temporel de l'UI correspondant à la position de lecture actuelle.

Caster une diffusion en direct

Il existe deux façons de configurer le SDK Web Receiver afin d'utiliser l'API Live pour contenu:

  1. à l'aide de l'intercepteur de messages LOAD dans votre application de récepteur Web. (recommandé)
  2. à l'aide d'une requête de charge générée côté expéditeur ou côté récepteur.

L'intercepteur fournit une LoadRequestData qui contient toutes les métadonnées importantes concernant une requête de chargement. À indiquez qu'une demande de chargement concerne un flux en direct, il vous suffit de définir streamType le mediaInformation à StreamType.LIVE MediaInformation.duration doit être défini sur -1, car les instances du lecteur le sont est responsable de leur calcul lorsque le contenu est LIVE.

/*
* This interceptor is called before your content is loaded by a Cast device
*/
playerManager.setMessageInterceptor(
   cast.framework.messages.MessageType.LOAD,
   request => { /* cast.framework.messages.LoadRequestData */
       request.media.streamType = cast.framework.messages.StreamType.LIVE;
   return request;
});

Ajout des données du guide des programmes

Les diffusions en direct, en particulier les diffusions de longue durée, comme les chaînes de télévision, afficher à l'écran un guide/des métadonnées de programmation basées sur la lecture en cours ; dans une diffusion en direct. Nous recommandons vivement aux fournisseurs de contenu de programmation dans leurs applications Web Receiver pour offrir expérience.

Vous pouvez configurer les données du guide initial pour un flux dans le message LOAD comme nous l'avons indiqué comme étant une diffusion en direct exemple précédent. Les sections ou programmes individuels de la diffusion en direct sont représenté sous la forme MediaMetadata qui sont ensuite stockés file d'attente. Il existe une classe MediaMetadata différente pour les différents types de programmes (par exemple, TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata etc.

Dans l'extrait de code suivant, nous utilisons l'objet MediaMetadata pour spécifier le l'heure de début de chaque émission Horodatage UNIX avec le paramètre sectionStartAbsoluteTime . La durée d'un programme est représentée en secondes.

// The metadata for a single TV show
const currentShow = new cast.framework.messages.TvShowMediaMetadata();
currentShow.episode = 15;
currentShow.seriesTitle = 'The Odyssey';
currentShow.title = 'Scylla and Charybdis';
currentShow.sectionStartAbsoluteTime = toUnixTimestamp('9:00 PM');
currentShow.sectionDuration = HOUR_IN_SECONDS;

const previousShow = new ...;
const nextShow = new ...;

const containerMetadata = new cast.framework.messages.ContainerMetadata();
containerMetadata.title = 'My TV Channel';
containerMetadata.sections = [previousShow, currentShow, nextShow];

playerManager.getQueueManager().setContainerMetadata(containerMetadata);

Plage pouvant être recherchée en direct

Le SDK Cast contient des éléments d'interface utilisateur et des commandes qui permettent à l'utilisateur de déplacer son la tête de lecture dans le flux à l'aide de la Contrôleur étendu ou des commandes tactiles sur les appareils tactiles.

La LiveSeekableRange représente la durée d'un flux qu'un utilisateur peut rechercher. Le Web Receiver, vous pouvez accéder aux informations sur la plage à rechercher via PlayerManager.getLiveSeekableRange(), qui renvoie un LiveSeekableRange . Voici les principales propriétés de l'objet à connaître:

  • start : heure de début (en secondes) de la plage par rapport à début du flux en secondes.
  • end : durée maximale (en secondes) que le lecteur peut rechercher. en fonction des segments disponibles, par rapport au début du flux.
  • isMovingWindow : valeur booléenne indiquant si la plage pouvant être recherchée se déplace (les segments plus anciens sont supprimés du fichier manifeste) avec le flux ; ce paramètre doit être défini sur true pour toutes les diffusions en direct.
  • isLiveDone : une valeur booléenne indiquant si la diffusion en direct a enregistré terminé, ce qui signifie qu'aucun nouveau segment n'est généré.

Taille de la plage pouvant être recherchée, représentée par le temps entre start et end, est déterminé par le nombre de segments disponibles dans le flux et se déplacer avec le flux. Par exemple, si, au début du flux, l'élément recherché la plage est {start:0, end: 600, isMovingWindow: false, isLiveDone: false}, dix secondes après le début de la diffusion, l'état peut passer à {start: 10, end: 610, isMovingWindow: true, isLiveDone: false}. Il est important de noter le début et les heures de fin dans la plage de recherche sont mises à jour en fonction du temps nécessaire pour générer un nouveau segment. Ainsi, si la longueur habituelle d'un segment de votre flux est de 10 secondes, les heures de début et de fin sont mises à jour toutes les 10 secondes environ, bien.

Désactiver la recherche

Pour désactiver la recherche dans un flux, vous devez la supprimer à partir des commandes multimédias compatibles avec Web Receiver:

// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);

Suppression de la commande multimédia compatible pour les signaux SEEK envoyés aux applications émettrices et écrans tactiles pour désactiver la recherche, mais ne désactive pas les commandes vocales telles que "Ok Google, recule de 30 secondes". Consultez les commandes multimédias compatibles avec la voix pour savoir comment désactiver les commandes multimédias vocales.

Événements du framework en direct

Deux événements, LIVE_ENDED et LIVE_IS_MOVING_WINDOW_CHANGED, sont inclus dans l'API Live. Les deux événements sont transmis LiveStatusEvent , qui contient la plage actuelle pouvant être recherchée.

Événement Description
LIVE_ENDED Déclenchement à la fin d'une diffusion en direct. À ce stade, la valeur end dans LiveSeekableRange cessera d'être mise à jour. les utilisateurs pourront toujours consulter le contenu situé dans la plage pouvant être recherchée en direct.
LIVE_IS_MOVING_WINDOW_CHANGED Déclenchement lorsque la plage à rechercher d'un flux en direct passe d'une fenêtre fixe à une fenêtre mobile, ou inversement. Pour une diffusion en direct, cette erreur se produit lorsque le lecteur détecte que le fichier manifeste supprime des segments antérieurs.

Scénarios de diffusion en direct

Il existe huit types de scénarios de diffusion en direct : chacun d'entre eux sont configurés à l'aide de trois paramètres principaux:

  • Le flux a une heure de début
  • Le flux a une heure de fin
  • Les utilisateurs sont autorisés à rechercher dans la fenêtre de recherche de la diffusion en direct.

Pour savoir comment configurer cette fonctionnalité, consultez l'article Ajouter les données du guide des programmes. ces valeurs.

Vous trouverez ci-dessous des descriptions et des captures d'écran des scénarios pris en charge par la diffusion API. Les variables T1 et T2 représentent le code temporel sur la page à gauche et à droite de l'UI respectivement.

Heure de début Heure de fin Recherche possible T1 T2
Scénario 1 Non Non Non Tête de jeu Non affichée
Scénario 2 Non No Oui Tête de lecture Non diffusée
Scénario 3 Non Oui Non Tête de lecture Non diffusée
Scénario 4 Non Oui Oui Tête de lecture Non diffusée
Scénario 5 Oui Non Non Afficher l'heure de début Tête de lecture
Scénario 6 Oui Non Oui Afficher l'heure de début Tête de lecture
Scénario 7 Oui Oui Non Afficher l'heure de début Afficher l'heure de fin
Scénario 8 Oui Oui Oui Afficher l'heure de début Afficher l'heure de fin

Premier scénario

Heure de début Heure de fin Recherche possible T1 T2
Non Non Non Tête de jeu Non affichée

Le premier scénario n'a pas d'heure de début ni de fin, et les utilisateurs sont incapables de rechercher dans le flux. Lorsqu'un utilisateur arrête un flux, la lecture reprend depuis Live Edge à l'endroit où la diffusion a été mise en pause.

Scénario 7

Un téléviseur affichant l'interface utilisateur en direct de Chromecast pour le scénario 7 avec l'heure de l'horloge Téléphone mobile affichant l'interface utilisateur en direct pour le scénario 7 avec l'heure de l'horloge

Heure de début Heure de fin Recherche possible T1 T2
Oui Oui Non Tête de jeu Durée du programme

Le scénario 7 a une heure de début et une heure de fin, mais il est impossible de le rechercher. Les deux dans l'interface utilisateur, T1 et T2, représentent la durée actuelle de la tête de lecture et le total du programme. Si un utilisateur met en pause/reprend la lecture, la diffusion à la périphérie du flux. Dans l'exemple ci-dessus, la partie rouge La barre de recherche représente la partie du flux depuis que l'utilisateur a commencé regarder.

Scénario 8

Un téléviseur affichant l'interface utilisateur en direct de Chromecast pour le scénario 8 avec l'heure de l'horloge Téléphone mobile affichant l'interface utilisateur en direct pour le scénario 8 avec l'heure de l'horloge

Heure de début Heure de fin Recherche possible T1 T2
Oui Oui Oui Tête de jeu Durée du programme

Le scénario 7 comporte une heure de début, une heure de fin et peut être recherché. Les deux codes temporels dans l'interface utilisateur, T1 et T2, représentent la durée actuelle de la tête de lecture et le programme total la durée de vie respectivement. Si l'utilisateur met en pause ou reprend la lecture, la diffusion reprend. au moment où il a fait une pause si celle-ci se trouve dans la fenêtre de recherche (la zone en rouge sur la barre de recherche représente l'endroit où l'utilisateur peut revenir en arrière et la zone en blanc représente ce vers quoi ils peuvent chercher.

Configurer un scénario

La configuration d'une diffusion en direct selon un scénario spécifique comporte trois étapes:

  1. Définir le type de flux : marquez le flux comme étant un diffusion en direct.
  2. Ajouter des données du guide des programmes : permet de définir une heure de début. et la durée dans l'objet MediaMetadata.
  3. Configurer la fonctionnalité de recherche : permet d'activer ou de désactiver la recherche.

Comportement de lecture

Lorsque la lecture est suspendue, les métadonnées de l'interface utilisateur continuent d'être mises à jour. inclut la tête de lecture et les heures de périphérie en direct. Lors de la reprise du flux, sont quelques comportements à connaître, qui varient en fonction de la configuration du flux.

Flux pouvant être recherchés

Lors de la reprise d'un flux pouvant être recherché:

  • Le bord actif doit correspondre à l'emplacement réel et à la plage d'accès. seront ajustés en conséquence.
  • Si la tête de lecture passe au-delà de l'émission en cours, la barre de lecture est mise à jour. avec les métadonnées de la nouvelle émission (y compris l'heure de début et de fin si disponibles).
  • Si une fenêtre pouvant faire l'objet d'une recherche a une longueur "X", la plage pouvant être recherchée s'étend à au plus "X", ou au début de l'émission, selon la valeur la plus courte.
  • Si l'utilisateur a été suspendu suffisamment longtemps pour que l'heure actuelle ne soit plus dans le la fenêtre de recherche, la diffusion reprendra au plus tôt (complètement à gauche) ; de la fenêtre de recherche.

Aller à LiveSeekableRange.end pour reprendre la lecture en périphérie directe après la réactivation.

let playerManager = cast.framework.CastReceiverContext.getInstance().getPlayerManager();
// Intercept the message to PLAY
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.PLAY, (requestData) => {
  ...
  if (playerManager.getLiveSeekableRange()) {
    // Resume playback at the live edge
    playerManager.seek(playerManager.getLiveSeekableRange().end);
  } else {
    return requestData;
  }
  ...
});

Flux non accessibles via une recherche

Lors de la reprise d'un flux qui ne peut pas être recherché:

  • Dans ce cas, la lecture reprendra au bord du direct.
  • Si l'arête directe dépasse l'affichage en cours, la barre de lecture doit être mis à jour avec les métadonnées de la nouvelle émission (y compris les heures de début et de fin) temps, le cas échéant).

Modifications de la surface d'API et personnaliser l'interface utilisateur en direct

Le SDK Cast permet de créer des interfaces utilisateur personnalisées au lieu à l'aide de l'interface utilisateur prête à l'emploi. Toutefois, il est important de suivre Checklist de conception de l'expérience utilisateur Cast, lors de la personnalisation de de commande.

Récepteur Web

Sur Web Receiver, le paramètre PlayerData comprend les champs suivants pour permettre aux développeurs d'étendre leurs pour les diffusions en direct:

  • isLive : drapeau indiquant si la diffusion en cours est une diffusion en direct par opposition à la VOD.
  • liveSeekableRange : plage pouvant être recherchée à afficher sur la délimitation à l'écran la fenêtre DVR.
  • mediaStartAbsoluteTime : date et heure de début de la section en valeur absolue (Époque UNIX).
  • sectionStartTimeInMedia : heure de début de la section en secondes par rapport à la l'heure de début du contenu multimédia.
  • sectionDuration : durée de la section en secondes.

Veillez également à tenir compte des deux événements en direct lors de la personnalisation de l'interface utilisateur.

SDK Android

Dans le cadre de la fonctionnalité En direct, l'utilisation du widget Barre de recherche Android dans la section Abandon de UIMediaController. Utilisez plutôt CastSeekBar.