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.
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:
onTimeShiftGetCurrentPosition()
: chiamato dal sistema per ottenere lo stato posizione di riproduzione in millisecondi. Per ulteriori dettagli, consulta Sezione Monitora i tempi di riproduzione.onTimeShiftGetStartPosition()
: chiamato dal sistema per iniziare della registrazione timeshift in millisecondi. Per ulteriori dettagli, consulta la sezione Tempi di riproduzione dei brani.onTimeShiftPause()
: chiamato quando l'utente mette in pausa la riproduzione.onTimeShiftResume()
: chiamato quando l'utente riprende la riproduzione.onTimeShiftSeekTo(long)
: chiamato quando il sistema deve cercare nuova posizione temporale. Di solito, la nuova posizione è tra la posizione iniziale e quella corrente.onTimeShiftSetPlaybackParams(PlaybackParams)
: chiamato dal sistema per fornire parametri di riproduzione, come la velocità di riproduzione, per la sessione corrente. Per ulteriori dettagli, consulta Sezione Supporta i parametri di riproduzione.
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.