個案研究

Instagram 和 Facebook 運用 Media3 PreloadManager 提供即時播放功能,提升使用者參與度

4 分鐘閱讀
Mayuri Khinvasara Khabya
開發人員關係工程師

在瞬息萬變的社群媒體世界中,使用者注意力稍縱即逝。Meta 應用程式 (Facebook 和 Instagram) 是全球最大的社群平台之一,為全球數十億使用者提供服務。對 Meta 而言,流暢播放影片不僅是功能,更是使用者體驗的核心。短篇影片 (尤其是 Facebook 動態消息和 Instagram Reels) 已成為參與度的主要推手。讓使用者盡情發揮創意,快速瀏覽內容,並與世界各地的使用者交流互動,享受娛樂體驗。

這篇網誌文章將帶您瞭解 Meta 如何提供真正的即時播放功能,為數十億使用者帶來全新的影片播放體驗。

短片延遲間隔

短篇影片互動的步調非常快,因為使用者會快速捲動動態消息。在不斷變化的動態消息中,影片之間的順暢轉場會為即時播放帶來獨特的障礙。因此,我們需要超越傳統磁碟快取和標準反應式播放策略的解決方案。

使用 Media3 PreloadManager 的未來發展方向

為因應短片內容興起導致的觀看習慣轉變,以及傳統長片播放架構的限制,Jetpack Media3 推出 PreloadManager。開發人員可透過這個元件,在使用者按下播放鍵前,將媒體保留在記憶體中,進而擺脫磁碟快取限制,提供精細的控制和自訂功能。如要瞭解使用 PreloadManager 播放媒體的技術細節,請參閱這篇系列網誌文章

Meta 如何實現真正的即時播放

現有複雜性

先前,Meta 會結合預熱 (讓播放器準備就緒) 和預先擷取 (將內容快取到磁碟) 來放送影片。這些方法雖然有助於提升網路效率,卻也帶來重大挑戰。暖機需要依序例項化多個播放器例項,這會耗用大量記憶體,且只能預先載入少數影片。這類資源需求量高,因此需要更具擴充性的強大解決方案,才能在現代的快速捲動社群動態消息中,提供即時播放功能。

整合 Media3 PreloadManager

為了實現真正的即時播放,Meta 的 Media Foundation Client 團隊將 Jetpack Media3 PreloadManager 整合到 Facebook 和 Instagram。他們選擇使用 DefaultPreloadManager,統一預先載入和播放系統。這項整合作業需要重構 Meta 現有架構,才能在 PreloadManager 和 ExoPlayer 執行個體之間有效分享資源。這項策略性轉移帶來了重要的架構優勢:能夠平行處理預先載入工作,並使用單一播放器執行個體管理多部影片。這大幅提升了預先載入容量,同時消除了先前做法的高記憶體複雜度。

colinKho.png

最佳化和效能調整

接著,團隊進行了廣泛的測試和疊代,以在 Meta 多元的全球裝置生態系統中,盡可能提升效能。初期積極預先載入有時會導致問題,包括記憶體用量增加和捲動效能變慢。為解決這個問題,他們仔細測量記憶體用量、考量裝置碎片化問題,並根據特定 UI 模式調整系統,進而微調實作方式。

針對特定 UI 模式微調實作項目

Meta 採用不同的預先載入策略,並根據每個應用程式的特定 UI 模式調整行為:

  • Facebook 動態消息:UI 會優先顯示目前進入檢視區塊的影片。管理員只會預先載入目前的影片,確保使用者暫停捲動時,影片會立即開始播放。在使用者可能會在影片之間看到許多靜態貼文的環境中,這種「僅限目前」的焦點可將資料和記憶體用量降到最低。目前系統設計為只預先載入顯示中的影片,但可以調整為預先載入即將推出的影片。
  • Instagram Reels:這是純影片環境,使用者會垂直滑動。這個 UI 採用「鄰近預先載入」策略。PreloadManager 會將目前 Reels 之後的影片立即載入記憶體。這種雙向方法可確保使用者向上或向下滑動時,轉場效果都能即時呈現,且流暢無礙。結果是使用者體驗品質 (QoE) 大幅提升,包括播放開始時間和顯示第一格畫面的時間都縮短了。

因應全球多元裝置生態系統的規模調整

在數十億部裝置上擴充高效能影片堆疊,不僅需要積極預先載入,更需要智慧功能。Meta 最初面臨記憶體壓力與捲動延遲的問題,尤其是在中低階硬體上。為解決這個問題,他們以 Media3 實作項目為基礎,建構了「裝置壓力偵測」系統。這些應用程式現在會即時監控 I/O 和 CPU 信號。如果裝置負載量較大,系統會暫停預先載入,優先確保 UI 回應速度。

這項裝置感知最佳化功能可確保即時播放的優點不會影響系統穩定性,讓即使是使用舊版硬體的使用者,也能享受流暢不中斷的動態消息。

mirabelHu.png

架構優勢和程式碼健康狀態

除了使用者相關指標外,遷移至 Media3 PreloadManager 也帶來了長期的架構優勢。雖然整合和調整程序需要多次疊代才能平衡效能,但產生的程式碼集更易於維護。團隊發現 PreloadManager API 可與現有的 Media3 生態系統完美整合,進而提升資源共用效率。對 Meta 而言,採用 Media3 PreloadManager 是對未來影片消費趨勢的策略性投資。

他們採用預先載入功能並加入裝置智慧閘道,成功提升應用程式的總觀看時間,並提高全球社群的整體參與度。

對 Instagram 和 Facebook 的影響

主動式架構立即為兩個平台帶來可衡量的改善。

  • Facebook 發現影片開始播放速度變快、播放停頓率降低,以及不良工作階段 (例如重新緩衝、延遲開始時間、畫質較差等) 減少,整體而言,觀看時間也隨之增加。
  • Instagram 的播放開始速度更快,總觀看時間也增加了。消除加入延遲 (使用者動作到顯示第一幀之間的時間間隔),直接提升參與度指標。減少緩衝可降低中斷次數,因此使用者觀看的內容更多,這也反映在參與度指標上。
beforeAfterPreload.gif

大規模工程學習重點

隨著媒體使用習慣不斷改變,即時體驗的需求也會持續成長。實作主動式記憶體管理,並針對規模和裝置多樣性進行最佳化,確保應用程式能有效滿足這些期望。

  • 優先進行智慧預先載入

透過預先載入功能,盡量減少延遲和載入時間,提供可靠的體驗。與簡單的磁碟快取不同,記憶體層級的預先載入可確保內容在使用者與其互動時隨時可用。

  • 根據 UI 模式調整實作方式

根據應用程式的 UI 自訂預先載入行為。舉例來說,針對 Facebook 等混合動態消息,請使用「僅限目前」焦點來節省記憶體;針對 Instagram Reels 等直向環境,請使用「相鄰預先載入」策略。

preloadingStrategy.png
  • 運用 Media3 確保程式碼長期運作正常

整合 Media3 API 而非自訂快取解決方案,可讓播放器和 PreloadManager 之間更妥善地共用資源,方便您使用單一播放器執行個體管理多部影片。這樣一來,工程團隊不僅能長期維護及最佳化程式碼集,還能享有最新的功能更新,確保程式碼集能因應未來需求。

  • 導入裝置感知最佳化

在各種裝置上測試,包括中低階機型,擴大市場觸及範圍。使用 CPU、記憶體和 I/O 等即時信號,動態調整功能和資源用量。

瞭解詳情

如要開始使用及瞭解詳情,請前往 

現在你已瞭解即時播放的祕訣,快來試試看吧!

撰寫者:

繼續閱讀