キュー

Cast フレームワークには、リスト を作成するためのキューイング クラスが用意されています。このリストは、動画や音声 ストリームなどの MediaInfo インスタンスから作成して、レシーバーで順番に再生できます。MediaQueueItemコンテンツ アイテムのこのキューは、編集、並べ替え、更新などを行うことができます。

レシーバー SDK は、キューに現在アクティブなアイテム(再生中または一時停止中)が 1 つ以上ある限り、キューを維持し、キューに対するオペレーションに応答します。送信者はセッションに参加して、キューにアイテムを追加できます。レシーバーは、最後のアイテムの再生が完了するか、送信者が再生を停止してセッションを終了するか、送信者がレシーバーに新しいキューを読み込むまで、キューアイテムのセッションを維持します。レシーバーは、デフォルトでは終了したキューに関する情報を保持しません。キュー内の最後のアイテムが終了すると、メディア セッションが終了し、キューが消えます。

メディア キューアイテムを作成して読み込む

メディア キューアイテムは、Cast フレームワークでは MediaQueueItem インスタンスとして表されます。 メディア キューアイテムを作成するときに、アダプティブ コンテンツで Media Player Library を使用している場合は、キュー内の前のアイテムの再生が終了する前にメディア プレーヤーがメディア キューアイテムのバッファリングを開始できるように、 プリロード時間を設定できます。アイテムの自動再生属性を 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 がアイテムに割り当てられます。アプリは、現在読み込まれているアイテム(再生されていない場合もあります)、読み込み中、プリロード済みなど、キューのステータスを確認できます。 MediaStatus クラスは、このステータス情報を提供します。

  • getPreloadedItemId() メソッド - 次のアイテムがプリロードされている場合は、プリロードされた商品アイテム ID を返します。
  • getLoadingItemId() メソッド - レシーバーで現在読み込み中のアイテム(キューでアクティブではない)の商品アイテム ID を返します。
  • getCurrentItemId() メソッド - メディア ステータスの変更が発生したときにキューでアクティブだったアイテムのアイテム ID を返します(再生されていない場合もあります)。
  • getQueueItems() メソッド(非推奨。代わりに MediaQueue を使用してください ) - MediaQueueItem インスタンスのリストを変更できないリストとして返します。

アプリは、 MediaQueue クラスを使用してアイテムのリストを取得することもできます。このクラスは、メディア キューのスパース データモデルです。キュー内のアイテム ID のリストを保持し、レシーバーと自動的に同期されます。 MediaQueue はすべての MediaQueueItem を保持しません。キューが非常に長い場合、メモリを使いすぎるためです。代わりに、オンデマンドでアイテムを取得し、最近アクセスしたアイテムのLruCacheを保持します。これらのメソッドを使用して、メディア キューにアクセスできます。

  • getItemIds() メソッド - すべてのアイテム ID のリストを順番に返します。
  • getItemAtIndex() メソッド - 指定されたインデックスにあるキャッシュされたアイテムを返します。アイテムがキャッシュされていない場合、MediaQueuenull を返し、アイテムの取得をスケジュールします。アイテム が取得されると、 MediaQueue.Callback#itemsUpdatedAtIndexes() が呼び出され、同じ ID で getItemAtIndex() を再度呼び出すと アイテムが返されます。
  • fetchMoteItemsRelativeToIndex() は、ユーザーがキュー UI を上または下にスクロールし、アプリがクラウドからさらにアイテムを取得する場合に使用されます。

これらのメソッドを他のメディア ステータス メソッドと組み合わせて使用して、キューのステータスとキュー内のアイテムに関する情報をアプリに通知します。レシーバーからの メディア ステータスの更新に加えて、アプリは キューの変更を RemoteMediaClient.CallbackMediaQueue.Callbackを実装することでリッスンできます。

また、Cast SDK には、キューイング用の UI を作成するための 2 つのユーティリティ クラスが用意されています。

たとえば、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 アルゴリズムを変更するなど)、キューからアイテムを削除する、キュー内のアイテムを並べ替えることができます。