預先載入管理工具可加快內容放送速度,縮短使用者切換項目時的等待時間,提供更優質的體驗。此外,您也可以自訂每個項目的預先載入時間長度和排名。
社群媒體常見的情況是,應用程式會向使用者顯示媒體選項清單或輪轉介面。舉例來說,應用程式可能會顯示短片輪轉介面。一部影片播完後,應用程式會切換到下一部。如果使用者不喜歡正在觀看的影片,可能會滑到下一部或上一部影片。
如果未預先載入影片內容,可能會導致使用者體驗不佳。使用者看完某個媒體後,必須等待下一個媒體載入。
另一方面,如果過度預先載入內容,則會浪費電力和網路頻寬,載入使用者可能永遠不會實際播放的內容。
DefaultPreloadManager 可協助應用程式平衡這些考量。預先載入管理工具會與應用程式搭配運作,判斷每個媒體項目的重要性,並預先載入適當數量。
人力分工
如果使用 DefaultPreloadManager,部分工作會由程式碼完成,部分則由預先載入管理工具完成。
應用程式必須執行下列操作:
- 使用建立預先載入管理工具時所用的
DefaultPreloadManager.Builder物件,建立應用程式的ExoPlayer物件。呼叫DefaultPreloadManager.Builder.buildExoPlayer()建立ExoPlayer。 - 告知預先載入管理工具應追蹤的每個媒體項目。這不一定是輪轉介面中的所有內容,只要告知前幾個要播放的項目即可。當使用者瀏覽輪轉介面時,您可以從預先載入管理工具的集區中新增和移除媒體項目。
- 回應預先載入管理工具的查詢,告知管理工具每個項目要預先載入多少內容。
使用者開始播放項目時,從預先載入管理工具擷取媒體。預先載入管理工具會為應用程式提供該內容的
MediaSource。將目前播放項目的索引告知預先載入管理工具。預先載入管理工具會使用這項資訊,判斷每個媒體項目與播放項目的距離,並據此動態決定預先載入的優先順序。當使用者前往新項目時,請使用預先載入管理工具更新該索引。
使用完畢後,請釋放預先載入管理工具,釋出其資源。
預先載入管理工具會執行下列操作:
- 並追蹤應用程式新增的所有媒體項目。
- 每次更新優先順序時,系統都會呼叫應用程式實作的
TargetPreloadStatusControl,查詢應用程式,瞭解要載入每個媒體項目的多少內容。 - 查詢應用程式後,系統會預先載入適量的各個媒體項目。預先載入管理工具會決定載入項目的順序。系統會優先推薦與使用者正在播放的項目最接近的項目。
- 應用程式要求內容時,預先載入管理工具會提供
MediaSource,其中包含已載入的任何內容。
預先載入管理工具工作流程
本節說明使用預先載入管理工具的應用程式一般工作流程。在這個範例中,我們假設應用程式會顯示短片輪轉介面。系統會自動播放選取的影片,但使用者可以向任一方向捲動輪轉介面,停止播放中的影片,並開始播放捲動到的影片。
後續頁面將詳細說明所有步驟。
- 應用程式會建立 目標預先載入狀態控制項。預先載入管理工具會查詢這項控制項,瞭解每個媒體項目要載入多少內容。
- 應用程式會建立
DefaultPreloadManager.Builder,並傳遞目標預先載入狀態控制項。接著,應用程式會使用建構工具建立預先載入管理工具。 - 應用程式將媒體項目新增至預先載入管理工具。應用程式會為每個項目提供索引,指定項目在輪轉介面中的位置。
- 針對每個媒體項目,預先載入管理工具會呼叫目標預先載入控制項,查詢應載入多少項目。目標預先載入控制項可能會指示載入特定時間長度的內容、僅擷取項目的中繼資料,或暫時不擷取該項目的任何內容。預先載入管理工具取得這項資訊後,就會開始載入媒體內容。
- 使用者開始播放內容時,應用程式會呼叫預先載入管理工具,要求該媒體項目的
MediaSource。應用程式也會呼叫setCurrentPlayingIndex(),告知預先載入管理工具正在播放哪個媒體項目,以便更新媒體項目的優先順序。 - 每當預先載入管理工具的優先順序更新時,就會再次呼叫目標預先載入控制項,找出每個項目要載入多少內容。
- 應用程式關閉輪轉介面時,會釋出預先載入管理工具,釋放資源。