Perekaman TV

Layanan masukan TV memungkinkan pengguna menghentikan sementara dan melanjutkan pemutaran saluran melalui API perekaman. Android N telah berkembang hingga ke perekaman dengan memungkinkan pengguna menyimpan beberapa sesi rekaman.

Pengguna bisa menjadwalkan rekaman terlebih dahulu, atau memulai rekaman sambil menonton suatu acara. Setelah sistem menyimpan rekaman, pengguna bisa menjelajah, menata, dan memutar kembali rekaman tersebut menggunakan aplikasi TV di sistem.

Jika Anda ingin menyediakan fungsi perekaman untuk layanan masukan TV, Anda harus menunjukkan pada sistem bahwa aplikasi Anda mendukung perekaman, mengimplementasikan kemampuan merekam program, menangani dan mengomunikasikan kesalahan yang muncul selama perekaman, dan mengelola sesi perekaman Anda.

Catatan: Aplikasi Live Channels belum menyediakan cara bagi pengguna untuk membuat atau mengakses perekaman. Hingga dibuat perubahan di aplikasi Live Channels, mungkin sulit menguji sepenuhnya pengalaman perekaman untuk layanan masukan TV Anda.

Menunjukkan Dukungan untuk Perekaman

Untuk memberi tahu sistem bahwa layanan masukan TV Anda mendukung perekaman, setel atribut android:canRecord di file XML metadata layanan Anda ke true:

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />

Untuk informasi selengkapnya mengenai layanan file metadata, lihat Mendeklarasikan Layanan Masukan TV Anda di Manifes.

Atau, Anda bisa menunjukkan dukungan perekaman dalam kode Anda menggunakan langkah-langkah ini:

  1. Dalam metode TvInputService.onCreate() Anda, buat objek TvInputInfo baru menggunakan kelas TvInputInfo.Builder.
  2. Saat membuat objek TvInputInfo baru, panggil setCanRecord(true) sebelum memanggil build() untuk menunjukkan layanan Anda mendukung perekaman.
  3. Daftarkan objek TvInputInfo Anda pada sistem dengan memanggil TvInputManager.updateTvInputInfo().

Merekam Sesi

Setelah layanan masukan TV Anda mendaftar bahwa mendukung fungsionalitas perekaman, sistem akan memanggil TvInputService.onCreateRecordingSession() bila perlu untuk mengakses implementasi perekaman aplikasi Anda. Implementasikan subkelas TvInputService.RecordingSession Anda sendiri dan kembalikan bila callback onCreateRecordingSession() dipicu. Subkelas ini bertanggung jawab mengalihkan ke saluran data yang benar, merekam data yang diminta, dan memberitahukan status perekaman serta kesalahan ke sistem.

Bila sistem memanggil RecordingSession.onTune(), dengan meneruskan URI saluran, setel ke saluran yang ditetapkan URI. Beri tahu sistem bahwa aplikasi Anda telah disetel ke saluran yang diinginkan dengan memanggil notifyTuned(), atau, jika aplikasi Anda tidak bisa disetel ke saluran yang tepat, panggil notifyError().

Sistem berikutnya akan memanggil callback RecordingSession.onStartRecording(). Aplikasi Anda harus segera mulai merekam. Bila sistem memanggil callback ini, sistem mungkin akan memberikan URI yang berisi informasi tentang program yang akan direkam. Bila perekaman selesai, Anda perlu menyalin data ini ke tabel data RecordedPrograms.

Terakhir, sistem akan memanggil RecordingSession.onStopRecording(). Pada tahap ini, aplikasi Anda harus segera berhenti merekam. Anda juga perlu membuat entri dalam tabel RecordedPrograms. Entri ini harus menyertakan URI data sesi yang direkam dalam kolom RecordedPrograms.COLUMN_RECORDING_DATA_URI, dan informasi program yang diberikan sistem dalam panggilan awal ke onStartRecording().

Untuk detail selengkapnya tentang cara mengakses tabel RecordedPrograms lihat Mengelola Sesi yang Direkam.

Menangani Kesalahan Perekaman

Jika terjadi kesalahan selama perekaman, yang menghasilkan data terekam yang tidak bisa digunakan, beri tahu sistem dengan memanggil RecordingSession.notifyError(). Begitu juga, Anda bisa memanggil notifyError() setelah sesi rekaman dibuat agar sistem mengetahui bahwa aplikasi Anda tidak bisa lagi merekam sesi.

Jika terjadi kesalahan selama perekaman, namun Anda ingin menyediakan rekaman parsial yang bisa digunakan pengguna untuk pemutaran, panggil RecordingSession.notifyRecordingStopped() untuk memungkinkan sistem menggunakan sesi parsial.

Mengelola Sesi yang Direkam

Sistem menyimpan informasi untuk semua sesi yang direkam dari semua aplikasi saluran yang mampu merekam dalam tabel penyedia materi TvContract.RecordedPrograms. Informasi ini bisa diakses lewat URI materi RecordedPrograms.Uri. Gunakan API penyedia materi untuk membaca, menambahkan, dan menghapus entri dari tabel ini.

Untuk informasi selengkapnya tentang menangani data penyedia materi, lihat Dasar-Dasar Penyedia Materi.

Praktik Terbaik

Perangkat TV mungkin memiliki penyimpanan terbatas, jadi pertimbangkan sebaik mungkin saat mengalokasikan penyimpanan untuk menyimpan sesi rekaman. Gunakan RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) bila tidak cukup ruang untuk menyimpan sesi rekaman.

Bila pengguna memulai perekaman, Anda harus memulai perekaman data secepatnya. Untuk memfasilitasinya, selesaikan setiap tugas yang memakan waktu di awal, seperti mengakses dan mengalokasikan ruang penyimpanan, saat sistem memanggil callback onCreateRecordingSession(). Hal ini akan memungkinkan Anda memulai perekaman dengan segera bila callback onStartRecording() dipicu.