キャスト フレームワークには、MediaQueueItem
インスタンスのリストの作成をサポートするキューイング クラスが用意されています。これは、レシーバで順番に再生するために動画や音声ストリームなどの MediaInfo
インスタンスから構築できます。このコンテンツ アイテムのキューは、編集、並べ替え、更新などを行うことができます。
Receiver SDK は、キューに現在アクティブ(再生中または一時停止)のアイテムが 1 つ以上ある限り、キューを維持してキューのオペレーションに応答します。送信者はセッションに参加して、キューにアイテムを追加できます。レシーバーは、最後のアイテムの再生が完了するか、送信側が再生を停止してセッションを終了するまで、または送信側がレシーバーに新しいキューを読み込むまで、キューアイテムのセッションを維持します。デフォルトでは、レシーバーは終了したキューに関する情報を保持しません。キューの最後のアイテムが終了すると、メディア セッションが終了し、キューが消えます。
メディアキュー アイテムを作成して読み込む
メディアキュー アイテムは、キャスト フレームワークで MediaQueueItem
インスタンスとして表されます。メディアキュー アイテムを作成する際に、アダプティブ コンテンツでメディア プレーヤー ライブラリを使用する場合は、キュー内の前のアイテムの再生が完了する前にプレーヤーがメディアキュー アイテムのバッファリングを開始できるように、プリロード時間を設定できます。アイテムの自動再生属性を 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()
メソッド - 次のアイテムがプリロードされている場合、プリロードされたアイテム ID を返します。getLoadingItemId()
メソッド - レシーバに現在読み込まれている(ただしキューではアクティブではない)アイテムのアイテム ID を返します。getCurrentItemId()
メソッド - メディア ステータスの変更が発生した時点でキュー内でアクティブだったアイテムのアイテム ID(再生されていない可能性があります)を返します。getQueueItems()
(非推奨。代わりにMediaQueue
を使用)メソッド -MediaQueueItem
インスタンスのリストを変更不可のリストとして返します。
また、MediaQueue
クラスを使用してアイテムのリストを取得することもできます。このクラスは、メディアキューのスパース データモデルです。アイテム ID のリストがキューに保持され、レシーバと自動的に同期されます。キューが非常に長いとメモリを大量に消費するため、MediaQueue
はすべての MediaQueueItem
を保持しません。代わりに、アイテムをオンデマンドで取得し、最近アクセスしたアイテムの LruCache
を保持します。メディアキューにアクセスするには、次のメソッドを使用します。
getItemIds()
メソッド - すべての商品アイテム ID のリストを順に返します。getItemAtIndex()
メソッド - 指定されたインデックスにキャッシュされたアイテムを返します。アイテムがキャッシュに保存されていない場合、MediaQueue
はnull
を返し、アイテムの取得をスケジュールします。アイテムがフェッチされると、MediaQueue.Callback#itemsUpdatedAtIndexes()
が呼び出され、同じ ID でgetItemAtIndex()
を再度呼び出すと、アイテムが返されます。fetchMoteItemsRelativeToIndex()
は、ユーザーがキュー UI を上または下にスクロールし、アプリがクラウドからさらにアイテムを取得する場合に使用します。
これらのメソッドを他のメディア ステータス メソッドと組み合わせて使用すると、キューのステータスとキュー内のアイテムのステータスをアプリに知らせることができます。レシーバからのメディア ステータスの更新に加えて、アプリは RemoteMediaClient.Callback
と MediaQueue.Callback
を実装することでキューの変更をリッスンできます。
また、Cast SDK には、キューイング用の UI を作成するためのユーティリティ クラスが 2 つあります。
MediaQueueRecyclerViewAdapter
: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
アルゴリズムを変更する)、キューからアイテムを削除する、キュー内のアイテムを並べ替えることができます。