Compatibilité avec le contrôle du direct

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.

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:

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.