Cast 架構提供排隊類別,可支援建立 MediaQueueItem
例項的清單,這些例項可透過 MediaInfo
例項 (例如影片或音訊串流) 建構,以便在接收器上依序播放。這個內容項目佇列
都可以編輯、重新排序、更新等等
接收端 SDK 會保留佇列,並回應 只要在佇列中至少有一個項目處於使用狀態 (播放中或 已暫停)。傳送者可以加入工作階段,並將項目新增至佇列。接收端 會維持佇列項目的工作階段,直到最後一個項目完成播放或是 傳送者停止播放並終止工作階段,或直到傳送者結束 在接收器上載入新的佇列。接收方不會 根據預設,終止佇列的相關資訊。佇列中的最後一個項目後 媒體工作階段結束後,佇列就會消失。
建立及載入媒體佇列項目
在 Cast 架構中,媒體佇列項目會以
MediaQueueItem
敬上
執行個體。
如果您使用媒體播放器,請建立媒體佇列項目
程式庫含有自動調整內容,您可以設定
預先載入時間,讓播放器在
排在佇列前的項目將項目的 autoplay 屬性設為 true,可讓接收器自動播放該項目。例如:
您可以使用建構工具模式建立媒體佇列項目,如下所示:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
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
最近存取的項目您可以使用下列方法存取媒體佇列:
getItemIds()
敬上 method - 依順序傳回所有項目 ID 的清單。getItemAtIndex()
敬上 method - 傳回指定索引的快取項目。如果項目未快取MediaQueue
會傳回null
和時間表,以便擷取商品。當項目MediaQueue.Callback#itemsUpdatedAtIndexes()
敬上 ,並再次呼叫具有相同 ID 的getItemAtIndex()
退貨。- 當使用者將佇列 UI 捲動至頂端或底部時,系統會使用
fetchMoteItemsRelativeToIndex()
。 您的應用程式想從雲端擷取更多項目。
使用這些方法搭配其他媒體狀態方法,您就能
應用程式,提供佇列狀態和佇列中項目的相關資訊。除了
接收端提供的媒體狀態更新,您的應用程式可以監聽
並排入佇列
RemoteMediaClient.Callback
敬上
和
MediaQueue.Callback
。
此外,Cast SDK 提供兩個公用程式類別,可用來建立佇列用的 UI。
MediaQueueRecyclerViewAdapter
、 備份 YAML 檔案RecyclerView
MediaQueueListAdapter
,用於備份ListAdapter
的資料。
例如,如要使用 MediaQueueRecyclerViewAdapter
建立 RecyclerView
:
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 }
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
演算法來選取下一個項目)。
移除佇列中的項目,然後重新排序佇列中的項目。