排程

Cast 架構提供排隊類別,可支援建立 MediaQueueItem 例項的清單,這些例項可透過 MediaInfo 例項 (例如影片或音訊串流) 建構,以便在接收器上依序播放。這個內容項目佇列 都可以編輯、重新排序、更新等等

接收端 SDK 會保留佇列,並回應 只要在佇列中至少有一個項目處於使用狀態 (播放中或 已暫停)。傳送者可以加入工作階段,並將項目新增至佇列。接收端 會維持佇列項目的工作階段,直到最後一個項目完成播放或是 傳送者停止播放並終止工作階段,或直到傳送者結束 在接收器上載入新的佇列。接收方不會 根據預設,終止佇列的相關資訊。佇列中的最後一個項目後 媒體工作階段結束後,佇列就會消失。

建立及載入媒體佇列項目

在 Cast 架構中,媒體佇列項目會以 MediaQueueItem敬上 執行個體。 如果您使用媒體播放器,請建立媒體佇列項目 程式庫含有自動調整內容,您可以設定 預先載入時間,讓播放器在 排在佇列前的項目將項目的 autoplay 屬性設為 true,可讓接收器自動播放該項目。例如: 您可以使用建構工具模式建立媒體佇列項目,如下所示:

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();

使用 RemoteMediaClient 的適當 queueLoad 方法,在佇列中載入媒體佇列項目陣列。

接收媒體佇列狀態更新

接收器載入媒體佇列項目時,會為該項目指派專屬 ID,該 ID 會在工作階段 (以及佇列的生命週期) 期間持續存在。您的 應用程式可以根據目前載入的項目,得知佇列的狀態 (可能不會播放)、載入或預先載入。MediaStatus 類別提供以下狀態資訊:

  • getPreloadedItemId()敬上 method - 如果下一個項目已預先載入,則傳回預先載入的項目 ID。
  • getLoadingItemId()敬上 method - 傳回正在載入 (但不是) 之項目的項目 ID 佇列中的活動)。
  • getCurrentItemId() 方法:在媒體狀態變更時,傳回在佇列中有效 (可能未播放) 的項目 ID。
  • getQueueItems() (已淘汰,請改用 MediaQueue) 方法 - 以不可修改的清單形式傳回 MediaQueueItem 例項清單。

應用程式也可以使用 MediaQueue敬上 類別這個類別是媒體佇列的稀疏資料模型。它會將項目 ID 清單保留在佇列中,並自動與接收器同步。《MediaQueue》並未保留所有 MediaQueueItem 因為佇列太長時會佔用太多記憶體相反地 會隨需擷取項目,並保持 LruCache 最近存取的項目您可以使用下列方法存取媒體佇列:

使用這些方法搭配其他媒體狀態方法,您就能 應用程式,提供佇列狀態和佇列中項目的相關資訊。除了 接收端提供的媒體狀態更新,您的應用程式可以監聽 並排入佇列 RemoteMediaClient.Callback敬上 和 MediaQueue.Callback

此外,Cast SDK 提供兩個公用程式類別,可用來建立佇列用的 UI。

例如,如要使用 MediaQueueRecyclerViewAdapter 建立 RecyclerView

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);
}

編輯待播清單

如要對佇列中的項目進行操作,請使用 RemoteMediaClient敬上 類別這些選項可讓您將項目陣列載入新的佇列、將項目插入至 現有佇列、更新佇列中項目的屬性,製作一個項目 在佇列中快轉或倒轉,設定佇列本身的屬性 (例如變更 repeatMode 演算法來選取下一個項目)。 移除佇列中的項目,然後重新排序佇列中的項目。