預先載入管理工具概念

預先載入管理工具可加快內容放送速度,縮短使用者切換項目時的等待時間,提供更優質的體驗。此外,您也可以自訂每個項目的預先載入時間長度和排名。

社群媒體常見的情況是,應用程式會向使用者顯示媒體選項清單或輪轉介面。舉例來說,應用程式可能會顯示短片輪轉介面。一部影片播完後,應用程式會切換到下一部。如果使用者不喜歡正在觀看的影片,可能會滑到下一部或上一部影片。

如果未預先載入影片內容,可能會導致使用者體驗不佳。使用者看完某個媒體後,必須等待下一個媒體載入。

另一方面,如果過度預先載入內容,則會浪費電力和網路頻寬,載入使用者可能永遠不會實際播放的內容。

DefaultPreloadManager 可協助應用程式平衡這些考量。預先載入管理工具會與應用程式搭配運作,判斷每個媒體項目的重要性,並預先載入適當數量。

人力分工

如果使用 DefaultPreloadManager,部分工作會由程式碼完成,部分則由預先載入管理工具完成。

應用程式必須執行下列操作:

  • 使用建立預先載入管理工具時所用的 DefaultPreloadManager.Builder 物件,建立應用程式的 ExoPlayer 物件。呼叫 DefaultPreloadManager.Builder.buildExoPlayer() 建立 ExoPlayer。
  • 告知預先載入管理工具應追蹤的每個媒體項目。這不一定是輪轉介面中的所有內容,只要告知前幾個要播放的項目即可。當使用者瀏覽輪轉介面時,您可以從預先載入管理工具的集區中新增和移除媒體項目。
  • 回應預先載入管理工具的查詢,告知管理工具每個項目要預先載入多少內容。
  • 使用者開始播放項目時,從預先載入管理工具擷取媒體。預先載入管理工具會為應用程式提供該內容的 MediaSource。

  • 將目前播放項目的索引告知預先載入管理工具。預先載入管理工具會使用這項資訊,判斷每個媒體項目與播放項目的距離,並據此動態決定預先載入的優先順序。當使用者前往新項目時,請使用預先載入管理工具更新該索引。

  • 使用完畢後,請釋放預先載入管理工具,釋出其資源。

預先載入管理工具會執行下列操作:

  • 並追蹤應用程式新增的所有媒體項目。
  • 每次更新優先順序時,系統都會呼叫應用程式實作的 TargetPreloadStatusControl,查詢應用程式,瞭解要載入每個媒體項目的多少內容。
  • 查詢應用程式後,系統會預先載入適量的各個媒體項目。預先載入管理工具會決定載入項目的順序。系統會優先推薦與使用者正在播放的項目最接近的項目。
  • 應用程式要求內容時,預先載入管理工具會提供 MediaSource,其中包含已載入的任何內容。

預先載入管理工具工作流程

本節說明使用預先載入管理工具的應用程式一般工作流程。在這個範例中,我們假設應用程式會顯示短片輪轉介面。系統會自動播放選取的影片,但使用者可以向任一方向捲動輪轉介面,停止播放中的影片,並開始播放捲動到的影片。

後續頁面將詳細說明所有步驟。

  1. 應用程式會建立 目標預先載入狀態控制項。預先載入管理工具會查詢這項控制項,瞭解每個媒體項目要載入多少內容。
  2. 應用程式會建立 DefaultPreloadManager.Builder,並傳遞目標預先載入狀態控制項。接著,應用程式會使用建構工具建立預先載入管理工具。
  3. 應用程式將媒體項目新增至預先載入管理工具。應用程式會為每個項目提供索引,指定項目在輪轉介面中的位置。
  4. 針對每個媒體項目,預先載入管理工具會呼叫目標預先載入控制項,查詢應載入多少項目。目標預先載入控制項可能會指示載入特定時間長度的內容、僅擷取項目的中繼資料,或暫時不擷取該項目的任何內容。預先載入管理工具取得這項資訊後,就會開始載入媒體內容。
  5. 使用者開始播放內容時,應用程式會呼叫預先載入管理工具,要求該媒體項目的 MediaSource。應用程式也會呼叫 setCurrentPlayingIndex(),告知預先載入管理工具正在播放哪個媒體項目,以便更新媒體項目的優先順序。
  6. 每當預先載入管理工具的優先順序更新時,就會再次呼叫目標預先載入控制項,找出每個項目要載入多少內容。
  7. 應用程式關閉輪轉介面時,會釋出預先載入管理工具,釋放資源。