プリロード マネージャーのコンセプト

プリロード マネージャーを使用すると、コンテンツをより迅速にユーザーに提供し、アイテムを切り替える際の待ち時間を短縮して、ユーザー エクスペリエンスを向上させることができます。また、アイテムごとにプリロードの期間とランキングをカスタマイズすることもできます。

ソーシャル メディアでよくある状況は、アプリがユーザーにメディアの選択肢のリストまたはカルーセルを表示することです。たとえば、アプリでショート動画のカルーセルを表示できます。1 つの動画が終了すると、アプリは次の動画に切り替わります。また、ユーザーが視聴している動画を気に入らない場合は、スワイプして次の動画または前の動画に移動する可能性があります。

動画コンテンツをプリロードしないと、ユーザー エクスペリエンスが低下する可能性があります。ユーザーがメディアの再生を終了した後、次のメディアが読み込まれるまで待機する必要があります。

一方、コンテンツを過度にプリロードすると、ユーザーが実際に再生しないコンテンツの読み込みに電力とネットワーク帯域幅を浪費することになります。

DefaultPreloadManager は、アプリがこれらの懸念事項のバランスを取るのに役立ちます。プリロード マネージャーは、アプリと連携して各メディア アイテムの重要度を判断し、適切な量を事前に読み込みます。

分業

DefaultPreloadManager を使用する場合、一部の処理はコードによって行われ、一部の処理はプリロード マネージャーによって行われます。

アプリは次の処理を行う必要があります。

  • プリロード マネージャーの作成に使用したのと同じ DefaultPreloadManager.Builder オブジェクトを使用して、アプリの ExoPlayer オブジェクトを作成します。DefaultPreloadManager.Builder.buildExoPlayer() を呼び出して ExoPlayer を作成します。
  • プリロード マネージャーに、追跡する各メディア アイテムを通知します。カルーセル内のすべてのコンテンツを伝える必要はなく、最初に再生されるいくつかのアイテムを伝えるだけで十分です。ユーザーがカルーセルを移動する際に、プリロード マネージャーのプールからメディア アイテムを追加または削除できます。
  • プリロード マネージャーからのクエリに応答し、各アイテムにプリロードするコンテンツの量をマネージャーに伝えます。
  • ユーザーがアイテムの再生を開始したら、プリロード マネージャーからメディアを取得します。プリロード マネージャーは、そのコンテンツの MediaSource をアプリに提供します。

  • 現在再生中のアイテムのインデックスをプリロード マネージャーに伝える。この情報は、プリロード マネージャーが各メディア アイテムと再生中のアイテムの近さを判断し、それに応じてプリロードの優先度を動的に設定するために使用されます。ユーザーが新しいアイテムに移動したら、プリロード マネージャーでそのインデックスを更新します。

  • プリロード マネージャーの使用が終了したら、プリロード マネージャーを解放してリソースを解放します。

プリロード マネージャーは次の処理を行います。

  • アプリが追加したすべてのメディア アイテムを追跡します。
  • 優先度が更新されるたびに、アプリによって実装された TargetPreloadStatusControl を呼び出してアプリにクエリを実行します。これを呼び出して、各メディア アイテムの読み込み量を確認します。
  • アプリにクエリを実行した後、各メディア アイテムの適切な量をプリロードします。プリロード マネージャーは、アイテムを読み込む順序を決定します。ユーザーが再生しているアイテムに近いアイテムを優先します。
  • アプリがコンテンツをリクエストすると、プリロード マネージャーは、すでに読み込まれているコンテンツを含む MediaSource を提供します。

プリロード マネージャーのワークフロー

このセクションでは、プリロード マネージャーを使用するアプリの一般的なワークフローについて説明します。この例では、アプリにショート動画のカルーセルが表示されることを想定しています。選択した動画は自動的に再生されますが、ユーザーはカルーセルをどちらの方向にもスクロールできます。スクロールすると、再生中の動画が停止し、スクロール先の動画が開始されます。

これらの手順については、以降のページで詳しく説明します。

  1. アプリが ターゲットのプリロード ステータス制御を作成します。プリロード マネージャーは、このコントロールにクエリを実行して、各メディア アイテムの読み込み量を判断します。
  2. アプリは DefaultPreloadManager.Builder を作成し、ターゲットのプリロード ステータス制御を渡します。次に、アプリはビルダーを使用してプリロード マネージャーを作成します。
  3. アプリはメディアアイテムをプリロードマネージャに追加します。アプリは、各アイテムのインデックスを提供し、カルーセル内のアイテムの位置を指定します。
  4. メディア アイテムごとに、プリロード マネージャーはターゲット プリロード コントロールを呼び出して、アイテムの読み込み量をクエリします。ターゲット プリロード コントロールは、特定の期間のコンテンツを読み込む、アイテムのメタデータのみを取得する、現時点ではそのアイテムを取得しない、などの指示を出すことができます。プリロード マネージャーはこの情報を取得すると、メディア コンテンツの読み込みを開始します。
  5. ユーザーがコンテンツの再生を開始すると、アプリはプリロード マネージャーを呼び出して、そのメディア アイテムの MediaSource をリクエストします。また、アプリは setCurrentPlayingIndex() を呼び出して、再生中のメディア アイテムをプリロード マネージャーに伝えます。これにより、メディア アイテムの優先度が更新されます。
  6. プリロード マネージャーの優先度が更新されるたびに、ターゲット プリロード コントロールが再度呼び出され、各アイテムの読み込み量が確認されます。
  7. アプリがカルーセルを閉じると、プリロード マネージャーを解放してリソースを解放します。