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 seterusnya.

SDK Penerima mengelola antrean dan merespons operasi di dalam antrean selama antrean memiliki setidaknya satu item yang sedang aktif (sedang diputar atau dijeda). Pengirim dapat bergabung dalam sesi dan menambahkan item ke antrean. Penerima mempertahankan sesi untuk item antrean hingga item terakhir menyelesaikan pemutaran atau pengirim menghentikan pemutaran dan menghentikan sesi, atau hingga pengirim memuat antrean baru di penerima. Penerima tidak mempertahankan informasi tentang antrean yang dihentikan secara {i>default<i}. Setelah item terakhir dalam antrean selesai, sesi media berakhir dan antrean menghilang.

Membuat dan memuat item antrean media

Item antrean media direpresentasikan dalam framework Cast sebagai instance MediaQueueItem. Saat membuat item antrean media, jika Anda menggunakan Media Player Library dengan konten adaptif, Anda dapat menyetel waktu pramuat sehingga pemutar dapat mulai menyangga item antrean media sebelum item di depannya dalam antrean selesai diputar. Menyetel putar otomatis item ke true (benar) akan memungkinkan penerima memutarnya secara otomatis. Misalnya, Anda dapat menggunakan pola builder untuk membuat item antrean media seperti 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 dengan menggunakan queueLoad dari RemoteMediaClient.

Menerima pembaruan status antrean media

Saat penerima memuat item antrean media, penerima akan menetapkan ID unik pada item tersebut yang bertahan selama durasi sesi (dan masa pakai antrean). Nama aplikasi dapat mempelajari status antrean dalam hal item yang saat ini dimuat (mungkin tidak sedang diputar), memuat, atau dipramuat. Tujuan MediaStatus memberikan informasi status berikut:

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

Aplikasi Anda juga bisa mendapatkan daftar item menggunakan class MediaQueue. Class adalah model data renggang dari antrean media. Sistem ini menyimpan daftar ID item dalam antrean, yang secara otomatis disinkronkan dengan penerima. MediaQueue tidak menyimpan semua MediaQueueItem karena akan memakan terlalu banyak memori ketika antrean sangat panjang. Sebaliknya, hal itu mengambil item sesuai permintaan dan mempertahankan LruCache item yang baru diakses. Anda dapat menggunakan metode berikut untuk mengakses antrean media:

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

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

Selain itu, Cast SDK menyediakan dua class utilitas guna 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 beroperasi pada item dalam antrean, gunakan metode antrean dari RemoteMediaClient . Ini memungkinkan Anda memuat array item ke dalam antrean baru, memasukkan item ke antrean yang ada, memperbarui properti item dalam antrean, membuat item melompat maju atau mundur dalam antrean, tetapkan properti antrean itu sendiri (misalnya, mengubah algoritma repeatMode yang memilih item berikutnya), menghapus item dari antrean, dan menyusun ulang item dalam antrean.