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:
- à l'aide de l'intercepteur de messages
LOAD
dans votre application de récepteur Web. (recommandé) - à 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 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
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
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:
- Définir le type de flux : marquez le flux comme étant un diffusion en direct.
- 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
. - 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
.