Assistenza per il time-shifting

Utilizza le API time-shifting nel servizio di input TV per consentire agli utenti di mettere in pausa, tornare indietro e mandare avanti velocemente i programmi in diretta nei tuoi canali di servizio. Se la tua app supporta il time-shifting, gli utenti possono guardare i tuoi contenuti in modo flessibile:

  • Gli utenti possono mettere in pausa i programmi mentre gestiscono un'interruzione a breve termine per non perdere mai i momenti chiave.
  • Gli utenti possono mandare avanti velocemente i contenuti che hanno già visto o quelli che non li interessano.
  • Gli utenti possono riavvolgere e riguardare i momenti preferiti nei contenuti del programma.

Figura 1. Controlli di riproduzione di Android TV utilizzati per il time-shifting.

Il time-shifting utilizza brevi segmenti temporanei registrati di dati del programma per implementare la capacità di riprodurre programmi dal vivo. Gli utenti non possono riprodurre queste registrazioni time-shift al di fuori della sessione di riproduzione corrente. Ciò significa che non possono utilizzare il time-shifting per mettere in pausa un programma da guardare il giorno successivo o per sospendere un programma da guardare in seguito mentre passa a un canale diverso.

Utilizza le API di registrazione TV se vuoi consentire agli utenti di registrare contenuti dei programmi da guardare al di fuori della sessione di riproduzione corrente.

Aggiungi supporto per il time-shifting

Per aggiungere il supporto del time-shifting al tuo servizio di input TV, devi implementare le API time-shifting nella tua classe TvInputService.Session, gestire la registrazione e la riproduzione delle registrazioni time-shifting nella tua app e comunicare al sistema che il tuo servizio di input fornisce supporto per time-shifting.

I metodi TvInputService.Session che implementi sono i seguenti:

Per maggiori informazioni su come informare il sistema che il tuo servizio di input supporta il time-shifting, consulta la sezione Inviare una notifica al sistema in merito allo stato del time-shifting.

Se utilizzi la libreria companion TIF per implementare la tua classe TvInputService.Session, ottieni automaticamente un'implementazione di time-shifting che utilizza ExoPlayer. Puoi utilizzare questa implementazione o eseguire l'override dei metodi dell'API time-shifting in BaseTvInputService.Session e fornire la tua implementazione. Per ulteriori informazioni sull'utilizzo della libreria companion TIF, consulta l'articolo Creare un servizio di input TV utilizzando la libreria companion TIF.

Registrare contenuti all'inizio di una sessione

Un utente può mettere in pausa, riavvolgere e mandare avanti velocemente i contenuti del programma accedendo ai controlli di riproduzione del canale premendo Seleziona mentre guarda i contenuti e quindi passando ai controlli di riproduzione oppure usando i controlli di riproduzione dedicati su un dispositivo remoto.

Poiché l'utente può utilizzare il time-shifting in qualsiasi momento durante la visione dei contenuti del programma, il servizio di input della TV deve iniziare a registrare contenuti in time shifting non appena l'utente si sintonizza su un canale della tua onTune()implementazione. Devi inoltre comunicare al sistema che sei in grado di registrare chiamando il numero notifyTimeShiftStatusChanged(int), come descritto nella sezione Inviare una notifica al sistema in merito allo stato del time-shifting.

Gestire l'archiviazione dei contenuti registrati

Il servizio di input TV è responsabile dell'archiviazione delle registrazioni time-shift nello spazio di archiviazione privato dell'app e della riproduzione dei contenuti quando il sistema richiama i tuoi metodi di time-shifting, ad esempio onTimeShiftResume(). Se i tuoi contenuti sono già archiviati nel cloud e la tua app può gestire le registrazioni time-shifting nel cloud, puoi utilizzare lo spazio di archiviazione sul cloud anziché lo spazio di archiviazione delle app.

Se i tuoi contenuti utilizzano contenuti protetti, il servizio di input TV è responsabile della corretta crittografia dei contenuti registrati e della decriptazione dei contenuti durante la riproduzione.

Poiché i contenuti video registrati possono richiedere una grande quantità di spazio di archiviazione, devi gestire con attenzione i contenuti registrati durante la riproduzione della sessione. Se la durata della sessione di riproduzione supera la quantità di tempo che puoi registrare e memorizzare per il timeshift, regola la registrazione in time shifting per mantenere il buffer attuale, ma assicurati che venga acquisita l'ora attuale. Ad esempio, se l'utente ha riprodotto contenuti da 31 minuti e la dimensione massima della registrazione con time-shifting è di 30 minuti, regola la registrazione e l'ora di inizio in modo che contenga contenuti dal minuto 1 al minuto 31.

Se il tuo servizio di ingresso TV non supporta il time-shifting a causa della mancanza di spazio di archiviazione, devi informare il sistema. Per maggiori dettagli su come comunicare al sistema le limitazioni di supporto del time-shifting, consulta la sezione Inviare una notifica al sistema in merito allo stato del time-shifting.

Quando l'utente passa a un altro canale o termina in altro modo la sessione di riproduzione, elimina i dati di time-shifting registrati.

Invia una notifica al sistema sullo stato del time-shifting

Se il tuo servizio di input TV supporta il time-shifting, chiama notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) per l'implementazione di onTune() quando un utente si sintonizza su un canale.

Per informare il sistema se le funzionalità di time-shifting del servizio di input cambiano, utilizza notifyTimeShiftStatusChanged(int). Ad esempio, se il tuo servizio di ingresso TV non supporta il time-shifting a causa di limitazioni dello spazio di archiviazione o per altri motivi, chiama il numero notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE).

Se il tuo servizio di ingresso TV non supporta il time-shifting, chiama notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) quando viene creata una sessione di riproduzione. Il sistema considera tutti i servizi di input che non eseguono mai chiamate a notifyTimeShiftStatusChanged() come servizi di input che non supportano il time-shifting. Sono interessati i servizi di input che utilizzano il livello API 22 o versioni precedenti.

Tempi di riproduzione dei brani

La posizione iniziale di una registrazione time-shifting è la prima posizione temporale assoluta, in millisecondi dall'epoca, che l'utente può cercare. Di solito, questo è l'orario in cui inizia la riproduzione video dopo la chiamata a onTune(). Tuttavia, quando l'utente guarda una quantità di contenuti superiore a quella registrata nella tua app, devi iniziare a registrare un nuovo segmento per il time-shifting e aggiornare l'ora di inizio di conseguenza.

La posizione corrente di una registrazione in time shifting è la posizione di riproduzione corrente, espressa in millisecondi dall'epoca. Questa posizione cambia continuamente durante la riproduzione. In genere, puoi utilizzare il motore di riproduzione per determinare questo valore, come illustrato nell'esempio seguente:

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;
}

Assicurati che l'ora di inizio specificata quando il sistema chiama il tuo onTimeShiftGetStartPosition() non sia mai superiore all'ora attuale specificata in onTimeShiftGetCurrentPosition(). Il sistema utilizza queste chiamate per aggiornare la durata del timeshift nell'interfaccia utente dei controlli di riproduzione.

Supporta i parametri di riproduzione

Per modificare la velocità di riproduzione durante il time-shifting, il sistema utilizza i parametri di riproduzione. Ad esempio, se l'utente decide di riavvolgere la riproduzione corrente, i nuovi parametri di riproduzione vengono trasmessi alla tua app con una velocità di riproduzione negativa. Il time-shifting supporta inoltre diversi livelli, 2x o 3x, di velocità di riproduzione per il riavvolgimento o l'avanzamento veloce.

Il sistema chiama il tuo metodo onTimeShiftSetPlaybackParams(PlaybackParams) con un oggetto PlaybackParams che contiene i parametri per la sessione corrente. Utilizza queste informazioni per configurare correttamente il motore di riproduzione multimediale.

Se il tuo motore di riproduzione non supporta un parametro, emula al meglio il comportamento previsto. Ad esempio, se il tuo motore di riproduzione non supporta la velocità 2x, usa operazioni di ricerca ripetute sul motore di riproduzione per ottenere una velocità di riproduzione circa doppia.

Dopo aver impostato i parametri, non modificare le impostazioni a meno che l'utente non emetta un comando di riproduzione che richieda un parametro diverso o passi a un nuovo canale.