Assistenza per il time-shifting

Utilizza le API di time-shifting nel servizio di input TV per consentire agli utenti di mettere in pausa, riavvolgere e avanzare rapidamente i programmi in diretta sui canali del tuo servizio. Se la tua app supporta il time-shifting, gli utenti hanno maggiore flessibilità nella visione dei contenuti:

  • Gli utenti possono mettere in pausa i programmi in caso di interruzioni a breve termine, in modo da non perdere mai i momenti chiave.
  • Gli utenti possono avanzare rapidamente i contenuti che hanno già visto o che non li interessano.
  • Gli utenti possono riavvolgere e rivedere i momenti preferiti dei contenuti dei programmi.
Figura 1. Controlli di riproduzione di Android TV utilizzati per il time-shifting.

Il time-shifting utilizza segmenti brevi, temporanei e registrati di dati dei programmi per implementare la possibilità di riprodurre i programmi in diretta. Gli utenti non possono riprodurre queste registrazioni di time-shifting al di fuori della sessione di riproduzione corrente. Ciò significa che non possono utilizzare il time-shifting per mettere in pausa un programma e guardarlo il giorno successivo o mettere in pausa un programma per guardarlo in un secondo momento mentre passano a un altro canale.

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

Aggiungere il supporto per il time-shifting

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

I metodi TvInputService.Session che implementi sono i seguenti:

Per maggiori informazioni su come comunicare al sistema che il tuo servizio di input supporta il time-shifting, consulta la sezione Comunicare al sistema lo stato del time-shifting.

Se utilizzi la libreria complementare TIF per implementare la classe TvInputService.Session, ottieni automaticamente un'implementazione del time-shifting che utilizza ExoPlayer. Puoi utilizzare questa implementazione o sostituire i metodi dell'API di time-shifting in BaseTvInputService.Session e fornire la tua implementazione. Per maggiori informazioni sull'utilizzo della libreria complementare TIF, consulta Creare un servizio di input TV utilizzando la libreria complementare TIF.

Registrare i contenuti all'avvio di una sessione

Un utente può mettere in pausa, riavvolgere e avanzare rapidamente i contenuti dei programmi accedendo ai controlli di riproduzione del canale, premendo Seleziona durante la visione dei contenuti e poi navigando fino ai controlli di riproduzione oppure utilizzando 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 dei programmi, il servizio di input TV deve iniziare a registrare i contenuti di time-shifting non appena l'utente sintonizza un canale nell'implementazione di onTune(). Devi anche comunicare al sistema che sei in grado di registrare chiamando notifyTimeShiftStatusChanged(int), come descritto nella sezione Comunicare al sistema lo stato del time-shifting.

Gestire l'archiviazione dei contenuti registrati

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

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

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

Se il servizio di input TV non è in grado di supportare il time-shifting a causa della mancanza di spazio di archiviazione, devi comunicarlo al sistema. Per maggiori dettagli su come comunicare al sistema le limitazioni del supporto per il time-shifting, consulta la sezione Comunicare al sistema lo stato del time-shifting.

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

Comunicare al sistema lo stato del time-shifting

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

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

Se il servizio di input TV non può supportare il time-shifting, chiama notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) quando viene creata una sessione di riproduzione. Il sistema considera qualsiasi servizio di input che non chiama mai notifyTimeShiftStatusChanged() come un servizio di input che non può supportare il time-shifting. Ciò riguarda i servizi di input che utilizzano il livello API 22 e versioni precedenti.

Monitorare i tempi di riproduzione

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

La posizione corrente di una registrazione di time-shifting è la posizione di riproduzione corrente, in millisecondi dall'epoca. Questa posizione cambia continuamente durante la riproduzione. In genere, puoi utilizzare il motore di riproduzione per determinare questo valore, come mostrato 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 fornita quando il sistema chiama onTimeShiftGetStartPosition() non sia mai maggiore della posizione temporale corrente fornita in onTimeShiftGetCurrentPosition(). Il sistema utilizza queste chiamate per aggiornare la durata del time-shifting nell'interfaccia utente dei controlli di riproduzione.

Supportare 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, alla tua app vengono passati nuovi parametri di riproduzione con una velocità di riproduzione negativa. Il time-shifting supporta anche diversi livelli di velocità di riproduzione, 2x o 3x, per il riavvolgimento o l'avanzamento rapido.

Il sistema chiama il tuo onTimeShiftSetPlaybackParams(PlaybackParams) metodo 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 motore di riproduzione non supporta un parametro, emula il comportamento previsto nel miglior modo possibile. Ad esempio, se il motore di riproduzione non supporta la velocità 2x, utilizza operazioni di ricerca ripetute sul motore di riproduzione per ottenere una velocità di riproduzione approssimativamente 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.