Gunakan API pergeseran waktu di layanan input TV agar pengguna dapat menjeda, memutar ulang, dan mempercepat program live di saluran layanan Anda. Jika aplikasi Anda mendukung pengguna yang beralih waktu, pengguna mendapatkan fleksibilitas terkait cara mereka menonton konten Anda:
- Pengguna dapat menjeda program sambil menangani gangguan jangka pendek, sehingga mereka tidak akan pernah melewatkan momen penting.
- Pengguna dapat melewati konten yang sudah mereka lihat atau konten yang tidak menarik minat mereka.
- Pengguna dapat memutar mundur dan menonton ulang momen favorit dalam konten program.
Pergeseran waktu menggunakan segmen data program yang singkat, sementara, dan direkam untuk menerapkan kemampuan untuk memutar program live. Pengguna tidak dapat memutar pergeseran waktu ini rekaman di luar sesi pemutaran saat ini. Ini berarti mereka tidak bisa menggunakan pergeseran waktu untuk menjeda program untuk ditonton keesokan harinya atau menonton nanti saat mereka beralih ke saluran lain.
Gunakan API perekaman TV jika Anda ingin agar pengguna dapat merekam konten program untuk ditonton di luar pemutaran saat ini sesi.
Menambahkan dukungan pergeseran waktu
Untuk menambahkan dukungan pergeseran waktu ke layanan input TV, Anda perlu mengimplementasikan metode
API pergeseran waktu di class TvInputService.Session
,
menangani perekaman dan pemutaran rekaman pergeseran waktu di aplikasi Anda, dan memberi tahu
sistem yang disediakan layanan input Anda untuk
dukungan pergeseran waktu.
Metode TvInputService.Session
yang Anda implementasikan adalah
hal berikut:
onTimeShiftGetCurrentPosition()
: dipanggil oleh sistem untuk mendapatkan nilai arus posisi pemutaran dalam milidetik. Untuk mengetahui detail selengkapnya, lihat Melacak waktu pemutaran.onTimeShiftGetStartPosition()
: dipanggil oleh sistem untuk memulai posisi rekaman pergeseran waktu saat ini dalam milidetik. Untuk detail selengkapnya, lihat bagian Melacak waktu pemutaran.onTimeShiftPause()
: dipanggil saat pengguna menjeda pemutaran.onTimeShiftResume()
: dipanggil saat pengguna melanjutkan pemutaran.onTimeShiftSeekTo(long)
: dipanggil ketika sistem perlu mencari posisi waktu baru. Biasanya, posisi baru berada di antara posisi awal dan posisi saat ini.onTimeShiftSetPlaybackParams(PlaybackParams)
: dipanggil oleh sistem untuk memberikan parameter pemutaran, seperti kecepatan pemutaran, untuk sesi saat ini. Untuk mengetahui detail selengkapnya, lihat Mendukung parameter pemutaran.
Untuk informasi selengkapnya tentang cara memberi tahu sistem yang didukung oleh layanan input Anda pergeseran waktu, lihat Memberi tahu sistem tentang status pergeseran waktu bagian.
Jika Anda menggunakan Library Pendamping TIF untuk mengimplementasikan
TvInputService.Session
, Anda akan otomatis mendapatkan
implementasi pergeseran waktu yang menggunakan ExoPlayer. Anda dapat menggunakan
atau mengganti metode API pergeseran waktu dalam
BaseTvInputService.Session
dan berikan izin Anda sendiri
terlepas dari implementasi layanan. Untuk informasi selengkapnya tentang cara menggunakan Library Pendamping TIF, lihat Membuat layanan input TV menggunakan
Library Pendamping TIF.
Merekam konten saat sesi dimulai
Pengguna dapat menjeda, memundurkan, dan mempercepat konten program dengan mengakses yang mengontrol pemutaran saluran, baik dengan menekan Pilih saat menonton konten dan kemudian menavigasi ke kontrol pemutaran atau dengan menggunakan kontrol pemutaran khusus pada perangkat jarak jauh.
Karena pengguna dapat
menggunakan pergeseran waktu kapan saja saat
menonton konten program, menonton TV
layanan input harus mulai merekam konten pergeseran waktu segera setelah pengguna
menyetel lagu ke channel di
onTune()
terlepas dari implementasi layanan. Anda juga perlu
memberi tahu sistem bahwa Anda dapat
merekam dengan memanggil
notifyTimeShiftStatusChanged(int)
,
sebagaimana dijelaskan dalam
Memberi tahu sistem tentang status pergeseran waktu
bagian.
Mengelola penyimpanan konten rekaman
Layanan input TV Anda bertanggung jawab untuk menyimpan rekaman pergeseran waktu di
penyimpanan aplikasi pribadi aplikasi Anda dan memutar konten saat sistem memanggil
metode pergeseran waktu Anda, seperti
onTimeShiftResume()
.
Jika konten Anda sudah disimpan di cloud dan aplikasi Anda dapat mengelola
rekaman pergeseran waktu di cloud, Anda bisa menggunakan penyimpanan cloud
dari penyimpanan aplikasi.
Jika konten Anda menggunakan konten yang dilindungi, layanan input TV Anda bertanggung jawab untuk enkripsi yang tepat terhadap konten rekaman dan dekripsi konten selama pemutaran.
Karena konten video yang direkam memerlukan penyimpanan yang besar, Anda harus mengelola konten rekaman dengan cermat selama pemutaran sesi. Jika pemutaran waktu sesi melebihi jumlah waktu yang dapat Anda catat dan simpan untuk pergeseran waktu, sesuaikan rekaman pergeseran waktu Anda untuk mempertahankan {i>buffer<i} saat ini tetapi memastikan waktu saat ini telah direkam. Misalnya, jika pengguna telah memutar konten selama 31 menit dan rekaman pergeseran waktu maksimum Anda berdurasi 30 menit. Sesuaikan rekaman dan waktu mulai agar dapat dimuat konten dari menit 1 hingga menit 31.
Jika layanan input TV Anda tidak dapat mendukung pergeseran waktu karena kurangnya penyimpanan, Anda harus memberi tahu sistem. Untuk mengetahui detail selengkapnya tentang cara memberi tahu tentang batasan dukungan pergeseran waktu, lihat Memberi tahu sistem tentang status pergeseran waktu bagian.
Saat pengguna beralih ke saluran lain atau mengakhiri pemutaran mereka sesi, hapus rekaman data perubahan waktu Anda.
Memberi tahu sistem tentang status pergeseran waktu
Jika layanan input TV Anda mendukung pergeseran waktu, panggil
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE)
di
implementasi
onTune()
saat pengguna menyesuaikan
pada channel.
Untuk memberi tahu sistem apakah ada kemampuan pergeseran waktu layanan input Anda
ubah, gunakan
notifyTimeShiftStatusChanged(int)
.
Misalnya, jika layanan input TV Anda tidak dapat mendukung pergeseran waktu
karena keterbatasan ruang penyimpanan atau
alasan lain, hubungi
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE)
.
Jika layanan input TV Anda tidak dapat mendukung pergeseran waktu sama sekali, panggil
notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED)
saat sesi pemutaran dibuat. Sistem memperlakukan layanan
input apa pun yang
tidak pernah menelepon
notifyTimeShiftStatusChanged()
sebagai layanan input yang tidak dapat
mendukung pergeseran waktu. Ini mencakup layanan input yang menggunakan API Level 22 dan
sebelumnya.
Melacak waktu pemutaran
Posisi awal rekaman pergeseran waktu adalah waktu absolut paling awal
posisi, dalam milidetik sejak epoch, yang dapat dicari oleh pengguna. Ini adalah
biasanya waktu ketika pemutaran
video dimulai setelah
onTune()
dipanggil.
Namun, ketika pengguna menonton konten dalam jumlah yang melebihi
aplikasi Anda dapat merekam, Anda harus
mulai merekam segmen baru untuk
pergeseran waktu dan memperbarui
waktu mulai Anda dengan tepat.
Posisi saat ini dari rekaman pergeseran waktu adalah pemutaran saat ini posisi kedua, dalam milidetik sejak epoch. Posisi ini terus berubah selama pemutaran. Biasanya, Anda dapat menggunakan mesin pemutaran untuk menentukan seperti yang ditunjukkan dalam contoh berikut:
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; }
Pastikan waktu mulai yang Anda berikan saat sistem memanggil
onTimeShiftGetStartPosition()
tidak pernah lebih besar dari posisi waktu saat ini yang Anda berikan
onTimeShiftGetCurrentPosition()
.
Sistem menggunakan panggilan ini untuk
mengupdate durasi pergeseran waktu di UI kontrol pemutaran.
Mendukung parameter pemutaran
Untuk mengubah kecepatan pemutaran selama pergeseran waktu, sistem menggunakan parameter pemutaran. Sebagai jika pengguna memutuskan untuk memundurkan pemutaran saat ini, parameter diteruskan ke aplikasi Anda dengan kecepatan pemutaran negatif. Pergeseran waktu juga mendukung beberapa level kecepatan pemutaran yang berbeda, 2x atau 3x untuk memundurkan atau memajukan video.
Sistem memanggil
onTimeShiftSetPlaybackParams(PlaybackParams)
dengan objek PlaybackParams
yang berisi
parameter untuk sesi saat ini. Gunakan informasi ini untuk
mengonfigurasi mesin pemutaran media Anda dengan benar.
Jika mesin pemutaran Anda tidak mendukung parameter, meniru perilaku yang diharapkan sebaik mungkin. Misalnya, jika pemutaran Anda mesin tidak mendukung kecepatan 2x, gunakan operasi pencarian berulang pada pemutaran Anda untuk mencapai kecepatan pemutaran sekitar dua kali lipat.
Setelah parameter ditetapkan, jangan ubah setelan kecuali jika pengguna memberikan perintah pemutaran yang memerlukan parameter atau tombol yang berbeda ke channel baru.