Gunakan API pergeseran waktu di layanan input TV untuk memungkinkan pengguna menjeda, memutar ulang, dan mempercepat program live di saluran layanan Anda. Jika aplikasi Anda mendukung perubahan waktu, pengguna akan mendapatkan fleksibilitas dalam cara menonton konten:
- Pengguna dapat menjeda program sambil menangani gangguan jangka pendek, sehingga mereka tidak akan pernah melewatkan momen penting.
- Pengguna dapat mempercepat pemutaran konten yang sudah mereka lihat atau konten yang tidak mereka minati.
- 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 memutar program live. Pengguna tidak dapat memutar rekaman pergeseran waktu ini di luar sesi pemutaran saat ini. Artinya, mereka tidak dapat menggunakan pergeseran waktu untuk menjeda program untuk ditonton keesokan harinya atau menjeda program untuk menonton nanti saat 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 di aplikasi Anda, dan memberi tahu
sistem bahwa layanan input Anda menyediakan dukungan pergeseran waktu.
Metode TvInputService.Session
yang Anda implementasikan adalah
sebagai berikut:
onTimeShiftGetCurrentPosition()
: dipanggil oleh sistem untuk mendapatkan posisi pemutaran saat ini (dalam milidetik). Untuk detail selengkapnya, lihat bagian Melacak waktu pemutaran.onTimeShiftGetStartPosition()
: dipanggil oleh sistem untuk mendapatkan posisi awal 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 saat sistem perlu mencari 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 mengetahui detail selengkapnya, lihat bagian Mendukung parameter pemutaran.
Untuk mengetahui informasi selengkapnya tentang cara memberi tahu sistem bahwa layanan input Anda mendukung pergeseran waktu, lihat bagian Memberi tahu sistem tentang status pergeseran waktu.
Jika menggunakan Library Pendamping TIF untuk mengimplementasikan class TvInputService.Session
, Anda 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 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, memutar ulang, dan mempercepat pemutaran konten program dengan mengakses kontrol pemutaran untuk saluran, baik dengan menekan Pilih sambil menonton konten, lalu membuka kontrol pemutaran atau dengan menggunakan kontrol pemutaran khusus di perangkat jarak jauh.
Karena pengguna dapat menggunakan pergeseran waktu kapan saja saat menonton konten program, layanan input TV Anda harus mulai merekam konten pergeseran waktu segera setelah pengguna membuka sebuah saluran dalam implementasi onTune()
Anda. Anda juga perlu
memberi tahu sistem bahwa Anda dapat merekam dengan memanggil
notifyTimeShiftStatusChanged(int)
,
seperti yang dijelaskan di bagian
Memberi tahu sistem tentang status pergeseran waktu.
Mengelola penyimpanan konten rekaman
Layanan input TV Anda bertanggung jawab untuk menyimpan rekaman pergeseran waktu di
penyimpanan aplikasi pribadi 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, bukan
penyimpanan aplikasi.
Jika konten Anda menggunakan konten yang dilindungi, layanan input TV Anda bertanggung jawab untuk enkripsi yang tepat pada konten rekaman dan dekripsi konten selama pemutaran.
Karena konten video rekaman dapat memerlukan penyimpanan dalam jumlah besar, Anda harus mengelola konten rekaman dengan cermat selama pemutaran sesi. Jika waktu sesi pemutaran melebihi jumlah waktu yang dapat Anda rekam dan simpan untuk pergeseran waktu, sesuaikan rekaman pergeseran waktu untuk mempertahankan buffer saat ini, tetapi pastikan waktu saat ini direkam. Misalnya, jika pengguna telah memutar konten selama 31 menit dan ukuran rekaman pergeseran waktu maksimum Anda adalah 30 menit, sesuaikan rekaman dan waktu mulai untuk memuat 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 detail selengkapnya tentang cara memberi tahu sistem tentang batasan dukungan pergeseran waktu, lihat bagian Memberi tahu sistem tentang status pergeseran waktu.
Saat pengguna beralih ke saluran lain atau mengakhiri sesi pemutaran, hapus data pergeseran waktu yang Anda rekam.
Memberi tahu sistem tentang status pergeseran waktu
Jika layanan input TV Anda mendukung pergeseran waktu, panggil notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE)
dalam implementasi onTune()
saat pengguna membuka sebuah saluran.
Untuk memberi tahu sistem jika ada perubahan kemampuan pergeseran waktu layanan input
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 layanan input apa pun yang
tidak pernah memanggil
notifyTimeShiftStatusChanged()
sebagai layanan input yang tidak dapat
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. Ini biasanya
adalah waktu ketika pemutaran video dimulai setelah
onTune()
dipanggil.
Namun, saat pengguna menonton jumlah konten yang melebihi batas yang
dapat direkam oleh aplikasi, Anda harus mulai merekam segmen baru untuk
perubahan waktu dan memperbarui waktu mulai.
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, seperti yang ditunjukkan pada 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 melebihi posisi waktu saat ini yang Anda berikan di
onTimeShiftGetCurrentPosition()
.
Sistem menggunakan panggilan ini untuk
memperbarui durasi pergeseran waktu di 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 level berbeda, 2x atau 3x, kecepatan pemutaran untuk memutar ulang atau memajukan.
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 tidak mendukung parameter, emulasikan perilaku yang diharapkan sebaik mungkin. Misalnya, jika mesin pemutaran Anda tidak mendukung kecepatan 2x, gunakan operasi pencarian berulang di mesin pemutaran 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.