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

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

ソーシャル メディアの一般的な状況として、アプリがメディア選択のリストまたはカルーセルをユーザーに表示することがあります。たとえば、アプリでショート動画のカルーセルを表示できます。1 つの動画が終了すると、アプリは次の動画に切り替わります。視聴中の動画が気に入らなければ、次の動画や前の動画にスワイプするかもしれません。

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

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

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

分業

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

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

  • プリロード マネージャーの作成に使用するのと同じ DefaultPreloadManager.Builder オブジェクトを使用して、アプリの ExoPlayer オブジェクトを作成します。DefaultPreloadManager.Builder.buildExoPlayer() を呼び出して ExoPlayer を作成します。
  • 追跡する各メディア アイテムについてプリロード マネージャーに通知します。これは、カルーセル内のすべてのコンテンツではない可能性があります。代わりに、再生する最初の数個のアイテムについてのみ伝えることができます。ユーザーがカルーセルを操作するにつれて、プリロード マネージャーのプールからメディア アイテムを追加したり削除したりできます。
  • カルーセルのコンテンツが変更された場合、またはユーザーが再生するアイテムを変更した場合は、プリロード マネージャーの優先度を無効にします。これにより、プリロード マネージャーは各メディア アイテムの優先度を再決定し、必要に応じてコンテンツを読み込みます。メディア アイテムを最初に追加した後、またユーザーがアイテム間を移動したときや、カルーセルにアイテムを追加または削除したときに、プリロード マネージャーを無効にします。
  • プリロード マネージャーからのクエリに応答し、各アイテムに対してプリロードするコンテンツのをマネージャーに伝えます。
  • ユーザーがアイテムの再生を開始したときに、プリロード マネージャーからメディアを取得します。プリロード マネージャーは、アプリにそのコンテンツの MediaSource を提供します。

  • 完了したらプリロード マネージャーをリリースし、リソースを解放します。

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

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

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

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

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

  1. アプリが ターゲットのプリロード ステータス コントロールを作成します。プリロード マネージャーは、このコントロールにクエリを実行して、各メディア アイテムの読み込み量を調べます。
  2. アプリは DefaultPreloadManager.Builder を作成し、ターゲットのプリロード ステータス制御を渡します。アプリは、ビルダーを使用してプリロード マネージャーを作成します。
  3. アプリはプリロード マネージャーにメディア アイテムを追加します。アプリは各アイテムのインデックスを提供し、カルーセル内のアイテムの位置を指定します。
  4. すべてのメディアが追加されると、アプリは invalidate() を呼び出して、プリロード マネージャーに各アイテムの優先度を設定してプリロードするよう指示します。
  5. メディア アイテムごとに、プリロード マネージャーはターゲット プリロード コントロールを呼び出して、アイテムのどの程度を読み込むべきかをクエリします。ターゲット プリロード コントロールは、特定の期間のコンテンツを読み込む、アイテムのメタデータのみを取得する、または現時点ではアイテムを取得しない、といった指示を出すことがあります。プリロード マネージャーがこの情報を取得すると、メディア コンテンツの読み込みが開始されます。
  6. ユーザーがコンテンツの再生を開始すると、アプリはプリロード マネージャーを呼び出し、そのメディア アイテムの MediaSource をリクエストします。また、アプリは setCurrentPlayingIndex() を呼び出して、再生中のメディア アイテムをプリロード マネージャーに通知します。
  7. ユーザーが別のメディア アイテムに移動すると、アプリはプリロード マネージャーにそのアイテムをリクエストし、現在の再生インデックスも更新します。次に、invalidate() を再度呼び出して、現在再生中のコンテンツに基づいて優先度を更新するようプリロード マネージャーに指示します。
  8. アプリがカルーセルにメディア アイテムを追加または削除する場合、それらのアイテムをプリロード マネージャーに追加または削除し、完了したら invalidate() を呼び出します。
  9. プリロード マネージャーの優先度が無効になるたびに、ターゲット プリロード コントロールを再度呼び出して、各アイテムをどの程度読み込むかを調べます。
  10. アプリがカルーセルを閉じると、プリロード マネージャーを解放してリソースを解放します。