Gunakan API pergeseran waktu pada layanan input TV Anda untuk memungkinkan pengguna menjeda, memutar mundur, dan mempercepat pemutaran program live di saluran layanan Anda. Jika aplikasi Anda mendukung pergeseran waktu, pengguna akan mendapatkan fleksibilitas tambahan dalam cara mereka menonton konten, seperti:
- Pengguna dapat menjeda program untuk menangani gangguan singkat, sehingga mereka tidak akan melewatkan momen-momen penting.
- Pengguna dapat melewati konten yang sudah mereka lihat, atau konten yang tidak menarik baginya dengan mempercepat pemutaran.
- Pengguna dapat memutar mundur dan menonton ulang momen favorit dalam konten program.

Gambar 1. Kontrol pemutaran Android TV yang digunakan untuk pergeseran waktu.
Pergeseran waktu menggunakan segmen data program yang singkat, sementara, dan sudah terekam guna menerapkan kemampuan untuk memutar program live. Pengguna tidak dapat memutar rekaman pergeseran waktu ini di luar sesi pemutaran saat ini, sehingga mereka tidak dapat menggunakan pergeseran waktu untuk menjeda program untuk ditonton pada hari berikutnya, atau menjeda program untuk ditonton di lain waktu sementara mereka beralih ke saluran lain. Gunakan API perekaman TV jika Anda ingin pengguna dapat merekam konten program untuk ditonton di luar sesi pemutaran saat ini.
Menambahkan dukungan pergeseran waktu
Untuk menambahkan dukungan pergeseran waktu ke layanan input TV, Anda perlu mengimplementasikan API pergeseran waktu dalam class TvInputService.Session
, menangani perekaman dan pemutaran rekaman pergeseran waktu dalam aplikasi Anda, serta memberi tahu sistem bahwa layanan input Anda menyediakan dukungan pergeseran waktu.
Metode TvInputService.Session
yang harus Anda implementasikan adalah:
onTimeShiftGetCurrentPosition()
: Dipanggil oleh sistem untuk mendapatkan posisi pemutaran saat ini (dalam milidetik). Untuk detail selengkapnya, lihat Melacak waktu pemutaran.onTimeShiftGetStartPosition()
: Dipanggil oleh sistem untuk mendapatkan posisi awal rekaman pergeseran waktu saat ini (dalam milidetik). Untuk detail selengkapnya, lihat Melacak waktu pemutaran.onTimeShiftPause()
: Dipanggil saat pengguna menjeda pemutaran.onTimeShiftResume()
: Dipanggil saat pengguna melanjutkan pemutaran.onTimeShiftSeekTo(long)
: Dipanggil saat sistem perlu mencari ke posisi waktu yang baru. Biasanya, posisi baru tersebut 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 detail selengkapnya, lihat Mendukung parameter pemutaran.
Untuk detail selengkapnya tentang cara memberi tahu sistem bahwa layanan input Anda mendukung pergeseran waktu, lihat Memberi tahu sistem tentang status pergeseran waktu.
Jika Anda menggunakan Library Pendamping TIF untuk mengimplementasikan class TvInputService.Session
, Anda akan secara otomatis mendapatkan implementasi pergeseran waktu yang menggunakan ExoPlayer. Anda dapat menggunakan implementasi ini, atau mengganti metode API pergeseran waktu dalam BaseTvInputService.Session
dan menyediakan implementasi Anda sendiri. Untuk mengetahui informasi lebih lanjut tentang cara menggunakan Library Pendamping TIF, lihat Membuat layanan input TV menggunakan Library Pendamping TIF.
Merekam konten saat sesi dimulai
Pengguna dapat menjeda, memutar mundur, dan mempercepat pemutaran konten program dengan mengakses kontrol-kontrol pemutaran untuk saluran (menekan Pilih selagi menonton konten, lalu menavigasi ke kontrol pemutaran), atau menggunakan kontrol pemutaran khusus di remote perangkat jika tersedia. Karena pengguna dapat menggunakan pergeseran waktu kapan saja selagi menonton konten program, layanan input TV Anda harus mulai merekam konten pergeseran waktu dalam implementasi onTune()
segera setelah pengguna membuka sebuah saluran. Pada tahap ini, Anda juga perlu memberi tahu sistem bahwa Anda dapat melakukan perekaman dengan memanggil notifyTimeShiftStatusChanged(int)
seperti yang dijelaskan dalam Memberi tahu sistem tentang status pergeseran waktu.
Mengelola penyimpanan konten rekaman
Layanan input TV Anda harus menyimpan rekaman pergeseran waktu di penyimpanan aplikasi, dan memutar konten saat sistem memanggil metode pergeseran waktu seperti onTimeShiftResume()
.
Jika konten Anda sudah disimpan di cloud dan aplikasi Anda dapat mengelola rekaman pergeseran waktu di cloud, Anda dapat menggunakan penyimpanan cloud sebagai pengganti penyimpanan aplikasi.
Jika konten Anda menggunakan konten yang dilindungi, layanan input TV Anda harus mengenkripsi konten yang direkam dan mendekripsi konten selama pemutaran dengan tepat.
Karena konten video rekaman dapat memerlukan ruang penyimpanan yang besar, Anda perlu mengelolanya dengan cermat selama pemutaran sesi. Jika waktu sesi pemutaran melebihi durasi yang dapat Anda rekam dan simpan untuk pergeseran waktu, Anda harus menyesuaikan rekaman pergeseran waktu untuk mempertahankan buffer saat ini, tetapi memastikan bahwa waktu saat ini tetap direkam. Misalnya, jika pengguna telah memutar konten selama 31 menit dan ukuran rekaman pergeseran waktu maksimum Anda adalah 30 menit, Anda dapat menyesuaikan rekaman dan waktu mulainya agar memuat konten dari menit 1 hingga menit 31.
Jika layanan input TV Anda tidak dapat mendukung pergeseran waktu karena kurangnya ruang penyimpanan, Anda harus memberi tahu sistem. Untuk detail selengkapnya tentang cara memberi tahu sistem mengenai batasan dukungan pergeseran waktu, lihat Memberi tahu sistem tentang status pergeseran waktu.
Saat pengguna beralih ke saluran lain atau mengakhiri sesi pemutaran, Anda harus menghapus data pergeseran waktu yang direkam.
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 membuka sebuah saluran.
Untuk memberi tahu sistem tentang perubahan kemampuan pergeseran waktu pada layanan input TV Anda, gunakan notifyTimeShiftStatusChanged(int)
.
Misalnya, jika layanan input TV Anda tidak dapat mendukung pergeseran waktu karena keterbatasan ruang penyimpanan atau alasan lain, panggil 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 akan memperlakukan setiap layanan input yang tidak pernah memanggil notifyTimeShiftStatusChanged()
sebagai layanan input yang tidak mendukung pergeseran waktu—ini mencakup layanan input yang menggunakan API level 22 dan yang lebih lama.
Melacak waktu pemutaran
Posisi awal rekaman pergeseran waktu adalah posisi waktu absolut paling awal (dalam milidetik sejak epoch) yang dapat dicari pengguna. Biasanya, posisi tersebut adalah waktu ketika pemutaran video dimulai setelah onTune()
dipanggil.
Namun, dalam kasus ketika pengguna menonton durasi konten yang melebihi kapasitas yang dapat direkam aplikasi, Anda mungkin harus mulai merekam segmen baru untuk pergeseran waktu, dan harus memperbarui waktu mulai dengan sesuai.
Posisi saat ini rekaman pergeseran waktu adalah posisi pemutaran saat ini, dalam milidetik sejak epoch. Posisi ini berubah terus-menerus selama pemutaran. Biasanya, Anda dapat menggunakan mesin pemutaran untuk menentukan nilai ini; misalnya:
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 melebihi posisi waktu saat ini yang Anda berikan dalam onTimeShiftGetCurrentPosition()
.
Sistem menggunakan panggilan ini untuk memperbarui durasi pergeseran waktu dalam UI kontrol pemutaran.
Mendukung parameter pemutaran
Untuk mengubah kecepatan pemutaran selama pergeseran waktu, sistem menggunakan parameter pemutaran. Misalnya, jika pengguna memutuskan untuk memundurkan pemutaran saat ini, parameter pemutaran baru akan diteruskan ke aplikasi Anda dengan kecepatan pemutaran negatif. Pergeseran waktu juga mendukung beberapa tingkat kecepatan pemutaran (2x, 3x) untuk memutar mundur atau maju cepat.
Sistem memanggil metode onTimeShiftSetPlaybackParams(PlaybackParams)
dengan objek PlaybackParams
yang berisi parameter untuk sesi saat ini. Gunakan informasi ini untuk mengonfigurasi mesin pemutaran media Anda dengan tepat.
Jika mesin pemutaran Anda tidak mendukung parameter, Anda harus berusaha mengemulasi perilaku yang diharapkan sebaik mungkin. Misalnya, jika mesin pemutaran Anda tidak mendukung kecepatan 2x, gunakan operasi pencarian berulang di mesin 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 berbeda atau beralih ke saluran baru.