Assistenza per il time-shifting

Utilizza le API timeshift nel servizio di input della TV per consentire agli utenti di mettere in pausa, tornare indietro e i programmi live nei canali dei tuoi servizi. Se la tua app supporta time-shifting, gli utenti hanno maggiore flessibilità nel modo in cui guardano i contenuti:

  • Gli utenti possono mettere in pausa i programmi mentre gestiscono un'interruzione di breve durata, non perdono mai i momenti chiave.
  • Gli utenti possono avanzare velocemente tra i contenuti che hanno già visto o quelli che non li interessano.
  • Gli utenti possono riavvolgere e guardare di nuovo i momenti preferiti nei contenuti del programma.

Figura 1. Controlli di riproduzione su Android TV usati per il timeshift.

Il time-shifting utilizza brevi segmenti temporanei e registrati di dati del programma per implementare la possibilità di riprodurre programmi live. Gli utenti non possono riprodurre questo timeshift registrazioni al di fuori della sessione di riproduzione corrente. Ciò significa che non possono utilizzare time-shifting per mettere in pausa un programma e guardarlo il giorno successivo oppure sospendere un programma per guarda più tardi mentre passano a un altro canale.

Se vuoi, utilizza le API di registrazione TV per consentire agli utenti di registrare i contenuti del programma da guardare al di fuori dell'attuale riproduzione durante la sessione.

Aggiungi il supporto del timeshift

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

I metodi TvInputService.Session che implementi sono le seguenti:

Per ulteriori informazioni su come comunicare al sistema che il tuo servizio di input sia supportato timeshift, vedi Inviare al sistema una notifica sullo stato del timeshift .

Se utilizzi la libreria companion TIF per implementare il tuo TvInputService.Session corso, riceverai automaticamente implementazione del time-shifting che utilizza ExoPlayer. Puoi utilizzare questo dell'implementazione o ignorare i metodi dell'API time-shifting BaseTvInputService.Session e fornisci la tua implementazione. Per ulteriori informazioni sull'utilizzo della libreria complementare TIF, consulta Creare un servizio di ingresso TV utilizzando la libreria companion TIF.

Registra contenuti all'inizio di una sessione

Un utente può mettere in pausa, riavvolgere e mandare avanti velocemente i contenuti del programma accedendo allo i controlli di riproduzione per il canale premendo Seleziona mentre guardando contenuti e poi passando ai controlli di riproduzione oppure utilizzando controlli di riproduzione dedicati su un dispositivo remoto.

Poiché l'utente può usa il time-shifting in qualsiasi momento mentre guardi i contenuti di un programma, sulla TV il servizio di input deve iniziare a registrare i contenuti time-shifting non appena l'utente si sintonizza su un canale del tuo onTune() implementazione. Devi inoltre comunica al sistema che sei in grado di registrare chiamando notifyTimeShiftStatusChanged(int), come descritto nei Inviare al sistema una notifica dello stato di timeshift .

Gestione dell'archiviazione dei contenuti registrati

Il tuo servizio di ingresso TV è responsabile dell'archiviazione delle registrazioni timeshift in lo spazio di archiviazione privato delle app e la riproduzione dei contenuti quando il sistema effettua la chiamata i tuoi metodi di time-shifting, onTimeShiftResume(). Se i tuoi contenuti sono già archiviati nel cloud e la tua app può gestire le registrazioni con timeshift nel cloud, ma puoi usare Cloud Storage di spazio di archiviazione per le app.

Se i tuoi contenuti utilizzano contenuti protetti, il servizio di immissione TV è responsabile la crittografia adeguata dei contenuti registrati e la decrittografia dei contenuti durante per riprodurre un video.

Poiché i contenuti video registrati possono richiedere una grande quantità di spazio di archiviazione, è necessario gestire attentamente i contenuti registrati durante la riproduzione della sessione. Se la riproduzione la durata della sessione supera la quantità di tempo che puoi registrare e archiviare time-shifting, regolate la registrazione timeshift per mantenere del buffer attuale, ma assicurati che venga acquisita l'ora attuale. Ad esempio, se l'utente stai riproducendo contenuti da 31 minuti e hai raggiunto il limite massimo di registrazioni in time-shifting è di 30 minuti, regola la registrazione e l'ora di inizio contenuto dal minuto 1 al minuto 31.

Se il tuo servizio di ingresso TV non è in grado di supportare il time-shifting per mancanza di lo spazio di archiviazione, devi informare il sistema. Per ulteriori dettagli su come inviare una notifica al sulle restrizioni del supporto del time-shifting, consulta le Inviare al sistema una notifica sullo stato del timeshift .

Quando l'utente passa a un altro canale o interrompe la riproduzione in altro modo elimina i dati di timeshifting registrati.

Invia una notifica al sistema sullo stato del timeshift

Se il tuo servizio di ingresso TV supporta il timeshift, chiama notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) in dell'implementazione onTune() quando un utente si sintonizza a un canale.

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

Se il tuo servizio di ingresso TV non è in grado di supportare il time-shifting, chiama notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) quando viene creata una sessione di riproduzione. Il sistema tratta qualsiasi servizio di input non chiama mai notifyTimeShiftStatusChanged() come servizio di input che non può supportare il time-shifting. Riguarda i servizi di input che utilizzano il livello API 22 e in precedenza.

Tenere traccia dei tempi di riproduzione

La posizione iniziale di una registrazione timeshift è il primo momento assoluto la posizione, in millisecondi dall'epoca, che l'utente può cercare. Questo è di solito l'ora in cui inizia la riproduzione video dopo Chiamata onTune(). Tuttavia, quando l'utente guarda una quantità di contenuti superiore a quella che l'app può registrare, devi iniziare a registrare un nuovo segmento timeshift e aggiorna l'ora di inizio di conseguenza.

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

Supporta i parametri di riproduzione

Per modificare la velocità di riproduzione durante il timeshift, il sistema utilizza i parametri di riproduzione. Per Ad esempio, se l'utente decide di riavvolgere la riproduzione corrente, la nuova riproduzione vengono trasmessi all'app con una velocità di riproduzione negativa. Il time-shifting supporta anche diversi livelli, 2x o 3x, di velocità di riproduzione per riavvolgere o andare avanti velocemente.

Il sistema chiama i tuoi onTimeShiftSetPlaybackParams(PlaybackParams) con un oggetto PlaybackParams che contiene 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, e emulare il comportamento previsto. Ad esempio, se la tua riproduzione non supporta la velocità 2x, usa operazioni di ricerca ripetute per ottenere circa il doppio della velocità di riproduzione.

Dopo aver impostato i parametri, non modificare le impostazioni a meno che l'utente emette un comando di riproduzione che richiede un parametro o opzioni diversi a un nuovo canale.