在瞬息萬變的社群媒體世界中,使用者的注意力很快就會轉移。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 執行個體之間有效共用資源。這項策略轉變帶來一項關鍵的架構優勢:能夠平行處理預先載入工作,並使用單一播放器執行個體管理多部影片。這大幅提升了預先載入容量,同時消除了先前方法的高記憶體複雜度。
最佳化和效能調整
接著,團隊進行了廣泛的測試和疊代,在 Meta 多元的全球裝置生態系統中,盡可能提升效能。一開始積極預先載入有時會造成問題,包括記憶體用量增加和捲動效能降低。為解決這個問題,他們仔細評估記憶體用量、考量裝置版本不一的情況,並根據特定 UI 模式調整系統,進而微調實作方式。
針對特定 UI 模式微調實作方式
Meta 採用不同的預先載入策略,並根據各應用程式的特定 UI 模式調整行為:
- Facebook 動態消息:使用者介面會優先顯示目前進入檢視畫面的影片。管理工具只會預先載入目前的影片,確保使用者停止捲動時,影片能立即開始播放。這種「僅限目前」的焦點,可將資料和記憶體用量降到最低,適合使用者在影片之間可能看到許多靜態貼文的環境。系統目前只會預先載入畫面中的影片,但可以調整為預先載入即將播放的影片。
- Instagram Reels:這是純影片環境,使用者可垂直滑動。團隊為這個 UI 實作了「相鄰預先載入」策略。PreloadManager 會將目前連續短片之後的影片立即保留在記憶體中。這種雙向做法可確保無論使用者向上或向下滑動,都能立即流暢切換。結果,使用者體驗品質 (QoE) 大幅提升,包括播放開始時間和第一幀畫面顯示時間。
擴充規模,因應多元的全球裝置生態系統
如要在數十億部裝置上擴充高效能影片堆疊,光是積極預先載入還不夠,還需要智慧功能。Meta 一開始面臨記憶體壓力和捲動延遲等挑戰,尤其是在中低階硬體上。為解決這個問題,他們在 Media3 實作中建構了裝置壓力偵測系統。應用程式現在會即時監控 I/O 和 CPU 信號。如果裝置負載過重,系統會暫停預先載入,優先處理 UI 回應。
這項裝置感知最佳化功能可確保即時播放功能不會影響系統穩定性,即使是使用舊硬體的使用者,也能享有更流暢、不中斷的動態消息。
架構優勢和程式碼健康狀態
除了面向使用者的指標外,遷移至 Media3 PreloadManager 還帶來了長期的架構優勢。雖然整合和調整程序需要多次疊代才能平衡效能,但最終的程式碼集更易於維護。團隊發現 PreloadManager API 可與現有的 Media3 生態系統完美整合,進而提升資源共用效率。對 Meta 而言,採用 Media3 PreloadManager 是對未來影片消費的策略性投資。
他們採用預先載入功能,並新增裝置智慧閘道,成功增加應用程式的總觀看時間,並提升全球社群的整體參與度。
對 Instagram 和 Facebook 的影響
主動式架構在兩個平台上都帶來了立竿見影且可衡量的成效。
- Facebook 發現影片開始播放的速度變快、播放停滯率降低,且不良工作階段減少 (例如重新緩衝、延遲開始時間、畫質降低等),整體觀看時間也因此增加。
- Instagram 發現播放開始速度加快,總觀看時間也增加。消除加入延遲 (從使用者動作到顯示第一個影格的間隔時間) 可直接提高參與度指標。緩衝時間縮短,中斷次數減少,使用者觀看的內容也變多,這點從參與度指標就能看出。
大規模工程的重要經驗
隨著媒體消費習慣演變,使用者對即時體驗的需求將持續成長。主動實作記憶體管理,並針對規模和裝置多樣性進行最佳化,可確保應用程式有效率地滿足這些期望。
- 優先採用智慧預先載入功能
預先載入內容,盡量減少卡頓和載入時間,提供可靠的體驗。相較於簡單的磁碟快取,利用記憶體層級預先載入,可確保使用者與內容互動時,內容已準備就緒。
- 根據 UI 模式調整導入方式
根據應用程式的使用者介面自訂預先載入行為。舉例來說,如果是 Facebook 等混合式動態消息,請採用「僅限目前」焦點,節省記憶體用量;如果是 Instagram Reels 等垂直環境,則採用「相鄰預先載入」策略。
- 運用 Media3 確保程式碼長期健康
與其使用自訂快取解決方案,不如整合 Media3 API,這樣播放器和 PreloadManager 就能更有效地共用資源,讓您透過單一播放器執行個體管理多部影片。這能打造出經得起未來考驗的程式碼集,讓工程團隊不僅能更輕鬆地維護及最佳化,還能享有最新功能更新。
- 導入裝置感知最佳化功能
在各種裝置上測試,包括中低階機型,擴大市場觸及範圍。使用 CPU、記憶體和 I/O 等即時信號,動態調整功能和資源用量。
瞭解詳情
- 探索 Media3 PreloadManager 說明文件。
- 如需進階技術和導入詳情,請參閱 系列網誌文章。
- 請查看範例應用程式,瞭解預先載入功能的實際運作情形。
現在你已瞭解即時播放的祕訣。快來試試吧!
-
個案研究Grab 是東南亞首屈一指的超級應用程式,透過單一應用程式為八個國家/地區的數百萬名使用者提供外送、交通和金融服務。
Ajesh Pai, Nguyen Van Minh, Tracy Agyemang • 閱讀時間:5 分鐘 -
個案研究WhatsApp 是全球最大的訊息平台,為全球數十億使用者提供服務。WhatsApp 是不同地區使用者預設的通訊工具,透過私密、可靠且安全的訊息服務,將使用者連結在一起。
Niharika Arora, Tracy Agyemang, Mayank Jain • 閱讀時間:8 分鐘 -
個案研究Tinder 的使命是讓每一代單身人士都能輕鬆有趣地認識新朋友,進而促成並激發真實的人際關係。
每週透過電子郵件接收最新的 Android 開發洞察資訊。