Utilisez des API de contrôle du direct dans votre service d'entrée TV pour permettre aux utilisateurs de mettre en pause, de revenir en arrière les programmes en direct sur vos chaînes de services. Si votre application est compatible avec le décalage temporel, les utilisateurs bénéficient d'une plus grande flexibilité pour regarder votre contenu:
- Les utilisateurs peuvent mettre en pause les programmes tout en gérant une interruption à court terme, donc de ne jamais manquer les moments clés.
- Les utilisateurs peuvent faire une avance rapide dans un contenu qu'ils ont déjà vu ou qui ne les intéresse pas.
- Les utilisateurs peuvent revenir en arrière et revoir leurs moments préférés dans les contenus du programme.
![](https://developer.android.com/static/images/training/tv/tif/time-shift.png?authuser=9&hl=fr)
Figure 1 : Commandes de lecture Android TV utilisées pour le contrôle du direct.
Le décalage temporel utilise des segments courts, temporaires et enregistrés de données de programme pour : de mettre en œuvre la possibilité de lire des programmes en direct. Les utilisateurs ne peuvent pas utiliser le contrôle du direct en dehors de la session de lecture en cours. Cela signifie qu'ils ne peuvent pas utiliser décalage temporel pour mettre en pause un programme afin de le regarder le lendemain ou mettre en pause un programme pour à regarder plus tard lorsqu'ils passent à une autre chaîne.
Utilisez les API d'enregistrement TV si vous le souhaitez. pour permettre aux utilisateurs d'enregistrer le contenu d'un programme à regarder en dehors de la lecture en cours session.
Ajouter le contrôle du direct
Pour ajouter le contrôle du direct à votre service d'entrée TV, vous devez implémenter la fonction
les API de décalage temporel dans votre classe TvInputService.Session
;
gérer l'enregistrement et la lecture des enregistrements
avec décalage temporel dans votre appli, et notifier
le système que votre service d'entrée
prend en charge le décalage temporel.
Les méthodes TvInputService.Session
que vous implémentez sont
les éléments suivants:
onTimeShiftGetCurrentPosition()
: appelé par le système pour obtenir position de lecture en millisecondes. Pour en savoir plus, consultez les Section Suivre les temps de lectureonTimeShiftGetStartPosition()
: appelé par le système pour obtenir le point de départ la position actuelle de l'enregistrement du décalage temporel, en millisecondes. Pour en savoir plus, consultez la section Suivre les temps de lecture.onTimeShiftPause()
: appelée lorsque l'utilisateur met en pause la lecture.onTimeShiftResume()
: appelée lorsque l'utilisateur reprend la lecture.onTimeShiftSeekTo(long)
: appelé lorsque le système doit rechercher nouvelle position temporelle. Normalement, la nouvelle position se situe entre la position de départ et la position actuelle.onTimeShiftSetPlaybackParams(PlaybackParams)
: appelé par le système pour fournir des paramètres de lecture, tels que la vitesse de lecture, pour la session en cours. Pour en savoir plus, consultez les Section Prise en charge des paramètres de lecture.
Pour savoir comment indiquer au système que votre service d'entrée est compatible le décalage temporel, consultez Informer le système de l'état du décalage temporel .
Si vous utilisez la bibliothèque TIF Companion pour implémenter votre
TvInputService.Session
, vous recevez automatiquement une
l'implémentation du décalage temporel avec ExoPlayer. Vous pouvez utiliser cette
ou ignorer les méthodes de l'API de décalage temporel dans
BaseTvInputService.Session
et fournissez les vôtres
la mise en œuvre. Pour en savoir plus sur l'utilisation de la bibliothèque TIF associée, consultez la section Créer un service d'entrée TV avec
la bibliothèque TIF Companion.
Enregistrer du contenu au début d'une session
L'utilisateur peut mettre en pause le contenu d'un programme, effectuer un retour arrière ou une avance rapide en accédant au les commandes de lecture de la chaîne, soit en appuyant sur Sélectionner pendant regarder du contenu, puis en accédant aux commandes de lecture ou en utilisant des commandes de lecture dédiées sur un appareil distant.
Comme l'utilisateur peut
utiliser le contrôle du direct à tout moment lorsque vous regardez des programmes, votre téléviseur
le service d'entrée doit commencer à enregistrer du contenu décalé dès que l'utilisateur
titres sur une chaîne de votre
onTune()
la mise en œuvre. Vous devez également
informer le système que vous êtes en mesure d'enregistrer en appelant
notifyTimeShiftStatusChanged(int)
,
comme décrit dans le
Informer le système de l'état du décalage temporel
.
Gérer le stockage des contenus enregistrés
Votre service d'entrée TV est chargé de stocker les enregistrements avec décalage temporel dans
l'espace de stockage privé de votre application et la lecture du contenu lorsque le système appelle
vos méthodes de décalage temporel, telles que
onTimeShiftResume()
Si votre contenu est déjà stocké dans le cloud et que votre application peut gérer
les enregistrements différés dans le cloud, vous pouvez utiliser le stockage cloud
d'espace de stockage des applications.
Si votre contenu utilise du contenu protégé, votre service d'entrée TV est responsable de le chiffrement correct des contenus enregistrés et leur déchiffrement pendant lecture.
Le contenu vidéo enregistré peut nécessiter une grande quantité de stockage, vous devez donc gérer soigneusement le contenu enregistré pendant la lecture d'une session. Si la lecture la durée de la session dépasse la durée que vous pouvez enregistrer et stocker avec contrôle du direct, ajustez votre enregistrement pour maintenir mais veillez à ce que l'heure actuelle soit capturée. Par exemple, si l'utilisateur a lu du contenu depuis 31 minutes et le maximum d'enregistrement avec décalage temporel est de 30 minutes, réglez l'heure de début et celle d'enregistrement pour de la minute 1 à la 31e minute.
Si votre service d'entrée TV n'est pas compatible avec le décalage temporel en raison de l'absence de d'espace de stockage, vous devez en informer le système. Pour savoir comment informer le sur les restrictions de prise en charge du décalage temporel, consultez la Informer le système de l'état du décalage temporel .
Lorsque l'utilisateur change de chaîne ou met fin à la lecture supprimer les données enregistrées relatives au décalage temporel.
Informer le système de l'état du décalage temporel
Si votre service d'entrée TV est compatible avec le contrôle du direct, appelez
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE)
dans votre
la mise en œuvre
onTune()
lorsqu'un utilisateur règle
à une chaîne.
Pour indiquer au système s'il existe des fonctionnalités de décalage temporel de votre service d'entrée
modifier, utiliser
notifyTimeShiftStatusChanged(int)
Par exemple, si votre service d'entrée TV n'est pas compatible avec le décalage temporel,
en raison de restrictions d'espace de stockage ou pour d'autres raisons, appelez
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)
Si votre service d'entrée TV n'est pas du tout compatible avec le décalage temporel, appelez
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED)
lors de la création d'une session de lecture. Le système traite tout service d'entrée
n'appelle jamais
notifyTimeShiftStatusChanged()
en tant que service d'entrée qui ne peut pas
sont compatibles avec le contrôle du direct. Cela concerne les services d'entrée utilisant le niveau d'API 22 et
plus tôt.
Suivre les temps de lecture
La position de départ d'un enregistrement avec décalage temporel est la plus proche de l'heure absolue.
en millisecondes depuis l'epoch,
que l'utilisateur peut rechercher. C'est
En général, l'heure à laquelle la lecture de la vidéo commence après
onTune()
est appelé.
Toutefois, lorsque l'utilisateur regarde une quantité de contenu qui dépasse
votre application peut enregistrer, vous devez commencer à enregistrer un nouveau segment
le décalage temporel et mettez à jour
votre heure de début en conséquence.
La position actuelle d'un enregistrement avec décalage temporel correspond à la lecture en cours en millisecondes depuis l'epoch. Cette position change continuellement pendant la lecture. En général, vous pouvez utiliser votre moteur de lecture pour déterminer , comme illustré dans l'exemple suivant:
Kotlin
override fun onTimeShiftGetCurrentPosition(): Long = tvPlayer?.run { currentProgram?.let { program -> currentPosition + program.startTimeUtcMillis } } ?: TvInputManager.TIME_SHIFT_INVALID_TIME
Java
@Override public long onTimeShiftGetCurrentPosition() { if (getTvPlayer() != null && currentProgram != null) { return getTvPlayer().getCurrentPosition() + currentProgram.getStartTimeUtcMillis(); } return TvInputManager.TIME_SHIFT_INVALID_TIME; }
Assurez-vous que l'heure de début indiquée lorsque le système appelle votre
onTimeShiftGetStartPosition()
n'est jamais supérieure à l'heure actuelle que vous indiquez dans
onTimeShiftGetCurrentPosition()
Le système utilise ces appels pour
mettre à jour la durée du décalage temporel dans l'interface utilisateur des commandes de lecture
Prise en charge des paramètres de lecture
Pour modifier la vitesse de lecture lors du décalage temporel, le système utilise les paramètres de lecture. Pour par exemple, si l'utilisateur décide de revenir en arrière, sont transmis à votre application avec une vitesse de lecture négative. Le décalage temporel est compatible avec différents niveaux de vitesse de lecture (x2 ou x3). pour effectuer un retour arrière ou une avance rapide.
Le système appelle votre
onTimeShiftSetPlaybackParams(PlaybackParams)
avec un objet PlaybackParams
contenant
pour la session en cours. Utilisez ces informations pour
configurer votre moteur de lecture multimédia de manière appropriée.
Si votre moteur de lecture n'accepte pas un paramètre, émuler le comportement attendu du mieux que vous pouvez. Par exemple, si votre lecture ne prend pas en charge deux fois plus de vitesse, utilisez des opérations de recherche répétées sur votre pour atteindre une vitesse de lecture approximativement deux fois supérieure.
Une fois les paramètres définis, ne les modifiez que si l'utilisateur émet une commande de lecture qui nécessite un paramètre différent ou à un nouveau canal.