Konsep pengelola pramuat

Pengelola pramuat membantu Anda memberikan pengalaman yang lebih baik kepada pengguna dengan menayangkan konten kepada mereka lebih cepat, dengan lebih sedikit waktu tunggu saat mereka beralih dari satu item ke item lainnya. Pengelola ini juga memungkinkan Anda menyesuaikan durasi dan peringkat pramuat per item.

Situasi umum di media sosial adalah, aplikasi menampilkan daftar atau carousel pilihan media kepada pengguna. Misalnya, aplikasi dapat menampilkan carousel video pendek. Saat satu video selesai, aplikasi akan beralih ke video berikutnya. Jika pengguna tidak menyukai video yang sedang ditonton, mereka dapat menggeser ke video berikutnya, atau video sebelumnya.

Jika Anda tidak memuat konten video terlebih dahulu, hal ini dapat menyebabkan pengalaman pengguna yang buruk. Pengguna selesai menonton beberapa media, lalu harus menunggu media berikutnya dimuat.

Di sisi lain, jika Anda memuat konten terlalu agresif, hal ini akan membuang daya dan bandwidth jaringan untuk memuat konten yang mungkin tidak pernah diputar oleh pengguna.

DefaultPreloadManager membantu aplikasi Anda menyeimbangkan masalah ini. Pengelola pramuat bekerja dengan aplikasi Anda untuk menentukan seberapa penting setiap item media, dan memuat jumlah yang sesuai terlebih dahulu.

Pembagian tugas

Jika Anda menggunakan DefaultPreloadManager, beberapa tugas dilakukan oleh kode Anda, dan beberapa tugas dilakukan oleh pengelola pramuat.

Aplikasi Anda harus melakukan hal berikut:

  • Buat objek ExoPlayer aplikasi menggunakan objek DefaultPreloadManager.Builder yang sama dengan yang Anda gunakan untuk membuat pengelola pramuat. Panggil DefaultPreloadManager.Builder.buildExoPlayer() untuk membuat ExoPlayer.
  • Beri tahu pengelola pramuat tentang setiap item media yang harus dilacak. Ini mungkin bukan semua konten dalam carousel; sebagai gantinya, Anda dapat memberi tahu pengelola pramuat tentang beberapa item pertama yang akan diputar. Saat pengguna menavigasi carousel, Anda dapat menambahkan dan menghapus item media dari kumpulan pengelola pramuat.
  • Respons kueri dari pengelola pramuat, dengan memberi tahu pengelola berapa banyak konten yang akan dimuat terlebih dahulu untuk setiap item.
  • Ambil media dari pengelola pramuat saat pengguna mulai memutar item. Pengelola pramuat memberi aplikasi Anda MediaSource untuk konten tersebut.

  • Beri tahu pengelola pramuat indeks item yang sedang diputar. Informasi ini digunakan oleh pengelola pramuat untuk menentukan seberapa dekat setiap item media dengan item yang diputar, dan memprioritaskan pramuat secara dinamis. Saat pengguna membuka item baru, perbarui indeks tersebut dengan pengelola pramuat.

  • Lepaskan pengelola pramuat saat Anda selesai menggunakannya, sehingga sumber dayanya akan dikosongkan.

Pengelola pramuat melakukan hal berikut:

  • Pengelola pramuat melacak semua item media yang telah ditambahkan aplikasi Anda.
  • Setiap kali prioritasnya diperbarui, pengelola pramuat akan mengirim kueri ke aplikasi Anda dengan memanggil TargetPreloadStatusControl yang diterapkan oleh aplikasi Anda. Pengelola pramuat memanggilnya untuk mengetahui berapa banyak setiap item media yang akan dimuat.
  • Setelah mengirim kueri ke aplikasi, pengelola pramuat akan memuat terlebih dahulu jumlah yang sesuai dari setiap item media. Pengelola pramuat memutuskan urutan pemuatan item. Pengelola pramuat memprioritaskan item yang paling dekat dengan item yang diputar pengguna.
  • Saat aplikasi meminta konten, pengelola pramuat akan menyediakan MediaSource dengan konten apa pun yang telah dimuat.

Alur kerja pengelola pramuat

Bagian ini menjelaskan alur kerja umum untuk aplikasi yang menggunakan pengelola pramuat. Dalam contoh ini, kita asumsikan aplikasi menampilkan carousel video pendek. Video yang dipilih diputar secara otomatis, tetapi pengguna dapat men-scroll carousel ke arah mana pun, yang akan menghentikan video yang sedang diputar dan memulai video yang di-scroll.

Semua langkah ini dibahas secara mendetail di halaman berikut.

  1. Aplikasi membuat kontrol status pramuat target. Pengelola pramuat mengirim kueri ke kontrol ini untuk mengetahui berapa banyak setiap item media yang akan dimuat.
  2. Aplikasi membuat DefaultPreloadManager.Builder, dan meneruskan kontrol status pramuat target. Aplikasi kemudian menggunakan builder untuk membuat pengelola pramuat manager.
  3. Aplikasi menambahkan item media ke pengelola pramuat. Aplikasi menyediakan indeks untuk setiap item, yang menentukan posisi item dalam carousel.
  4. Untuk setiap item media, pengelola pramuat memanggil kontrol pramuat target untuk mengirim kueri berapa banyak item yang harus dimuat. Kontrol pramuat target mungkin mengatakan untuk memuat konten dengan durasi tertentu, hanya mengambil metadata item, atau tidak mengambil item tersebut saat ini. Setelah pengelola pramuat mendapatkan informasi ini, pengelola pramuat akan mulai memuat konten media.
  5. Saat pengguna mulai memutar konten, aplikasi akan memanggil pengelola pramuat untuk meminta MediaSource untuk item media tersebut. Aplikasi juga memanggil setCurrentPlayingIndex() untuk memberi tahu pengelola pramuat item media mana yang sedang diputar, sehingga prioritas item media akan diperbarui.
  6. Setiap kali prioritas pengelola pramuat diperbarui, pengelola pramuat akan memanggil kontrol pramuat target sekali lagi untuk mengetahui berapa banyak setiap item yang akan dimuat.
  7. Saat aplikasi menutup carousel, aplikasi akan melepaskan pengelola pramuat untuk mengosongkan sumber dayanya.