Mengantre

Framework Cast menyediakan class antrean yang mendukung pembuatan daftar instance MediaQueueItem, yang dapat dibuat dari instance MediaInfo seperti streaming video atau audio, untuk diputar secara berurutan di penerima. Antrean item konten ini dapat diedit, diurutkan ulang, diperbarui, dan sebagainya.

Receiver SDK mempertahankan antrean dan merespons operasi pada antrean selama antrean memiliki setidaknya satu item yang saat ini aktif (diputar atau dijeda). Pengirim dapat bergabung ke sesi dan menambahkan item ke antrean. Penerima mempertahankan sesi untuk item antrean hingga item terakhir menyelesaikan pemutaran atau pengirim menghentikan pemutaran dan mengakhiri sesi, atau hingga pengirim memuat antrean baru di penerima. Secara default, penerima tidak menyimpan informasi apa pun tentang antrean yang dihentikan. Setelah item terakhir dalam antrean selesai, sesi media akan berakhir dan antrean akan hilang.

Membuat dan memuat item antrean media

Item antrean media direpresentasikan dalam framework Cast sebagai a MediaQueueItem instance. Saat membuat item antrean media, jika menggunakan Pemutar Media Library dengan konten adaptif, Anda dapat menetapkan waktu pramuat sehingga pemutar dapat mulai mem-buffer item antrean media sebelum item di depannya dalam antrean selesai diputar. Menetapkan atribut putar otomatis item ke benar (true) memungkinkan penerima memutarnya secara otomatis. Misalnya, Anda dapat menggunakan pola builder untuk membuat item antrean media sebagai berikut:

Kotlin
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

Muat array item antrean media dalam antrean menggunakan metode yang sesuai dari RemoteMediaClient.queueLoad

Menerima pembaruan status antrean media

Saat memuat item antrean media, penerima akan menetapkan ID unik ke item yang dipertahankan selama durasi sesi (dan masa aktif antrean). Aplikasi Anda dapat mempelajari status antrean dalam hal item mana yang saat ini dimuat (mungkin tidak diputar), dimuat, atau dimuat sebelumnya. Class MediaStatus memberikan informasi status ini:

  • getPreloadedItemId() metode - Jika item berikutnya telah dimuat sebelumnya, metode ini akan menampilkan ID item yang dimuat sebelumnya.
  • getLoadingItemId() metode - Menampilkan ID item dari item yang saat ini dimuat (tetapi tidak aktif dalam antrean) di penerima.
  • getCurrentItemId() metode - Menampilkan ID item dari item yang aktif dalam antrean (mungkin tidak diputar) pada saat perubahan status media terjadi.
  • getQueueItems() (Tidak digunakan lagi, gunakan MediaQueue sebagai gantinya) method - Menampilkan daftar MediaQueueItem instance sebagai daftar yang tidak dapat diubah.

Aplikasi Anda juga dapat mendapatkan daftar item menggunakan class MediaQueue. Class ini adalah model data jarang dari antrean media. Class ini menyimpan daftar ID item dalam antrean, yang otomatis disinkronkan dengan penerima. MediaQueue tidak menyimpan semua MediaQueueItem karena akan menggunakan terlalu banyak memori saat antrean sangat panjang. Sebagai gantinya, item akan diambil sesuai permintaan dan menyimpan LruCache item yang baru-baru ini diakses. Anda dapat menggunakan metode ini untuk mengakses antrean media:

  • getItemIds() metode - Menampilkan daftar semua ID item secara berurutan.
  • getItemAtIndex() metode - Menampilkan item yang di-cache pada indeks tertentu. Jika item tidak di-cache, MediaQueue akan menampilkan null dan menjadwalkan untuk mengambil item. Saat item diambil, MediaQueue.Callback#itemsUpdatedAtIndexes() akan dipanggil, dan memanggil getItemAtIndex() dengan ID yang sama lagi akan menampilkan item.
  • fetchMoteItemsRelativeToIndex() digunakan saat pengguna men-scroll UI antrean ke atas atau ke bawah, dan aplikasi Anda ingin mengambil lebih banyak item dari cloud.

Gunakan metode ini bersama dengan metode status media lainnya untuk memberi tahu aplikasi Anda tentang status antrean dan item dalam antrean. Selain pembaruan status media dari penerima, aplikasi Anda dapat memproses perubahan pada antrean dengan menerapkan RemoteMediaClient.Callback dan MediaQueue.Callback.

Selain itu, Cast SDK menyediakan dua class utilitas untuk membuat UI untuk antrean.

Misalnya, untuk membuat RecyclerView menggunakan MediaQueueRecyclerViewAdapter:

Kotlin
class MyRecyclerViewAdapter(mediaQueue: MediaQueue?) :
    MediaQueueRecyclerViewAdapter<MyViewHolder?>(mediaQueue) {
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val item = getItem(position)

        // Update the view using `item`.
        ...
    }
}

class MyViewHolder : RecyclerView.ViewHolder {
    // Implement your own ViewHolder.
    ...
}

fun someMethod() {
    val adapter = MyRecyclerViewAdapter(
        mCastSession.remoteMediaClient.getMediaQueue())
    val recyclerView =
        activity.findViewById(R.id.my_recycler_view_id) as RecyclerView
    recyclerView.adapter = adapter
}
Java
public class MyRecyclerViewAdapter extends MediaQueueRecyclerViewAdapter<MyViewHolder> {
    public MyRecyclerViewAdapter(MediaQueue mediaQueue) {
        super(mediaQueue);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
      MediaQueueItem item = getItem(position);

      // Update the view using `item`.
      ...
    }
}

public class MyViewHolder implements RecyclerView.ViewHolder {
  // Implement your own ViewHolder.
  ...
}

public void someMethod() {
    RecyclerView.Adapter adapter = new MyRecyclerViewAdapter(
        mCastSession.getRemoteMediaClient().getMediaQueue());
    RecyclerView recyclerView =
        (RecyclerView) getActivity().findViewById(R.id.my_recycler_view_id);
    recyclerView.setAdapter(adapter);
}

Mengedit antrean

Untuk mengoperasikan item dalam antrean, gunakan metode antrean class RemoteMediaClient. Metode ini memungkinkan Anda memuat array item ke dalam antrean baru, menyisipkan item ke dalam antrean yang ada, memperbarui properti item dalam antrean, membuat item melompat maju atau mundur dalam antrean, menetapkan properti antrean itu sendiri (misalnya, mengubah algoritma repeatMode yang memilih item berikutnya), menghapus item dari antrean, dan mengurutkan ulang item dalam antrean.