部落格

iOS 上 YouTube 背景播放的實際運作原理

由 talavo 撰寫5 分鐘閱讀

許多人在 talavo 中嘗試的第一件事,就是在影片播放時鎖定手機——然後對音訊持續播放感到些許驚訝。在標準 iOS Safari 中這是不可能的。以下是背後實際發生的事,因為誠實的版本比「我們打開了某個設定」更有趣。

限制所在

talavo 在 WKWebView 中渲染頁面——這與 Safari 使用的 WebKit 引擎相同,也是 Apple 在 iOS 上允許的唯一瀏覽器引擎。WebKit 對背景處理刻意採取積極策略:當網頁視圖離開前景時,系統會節流計時器並暫停媒體管線。這對電池壽命很好,但對只想在螢幕關閉時繼續收聽類播客影片的人來說卻很糟糕。YouTube 本身將不中斷的背景播放功能保留給 Premium 用戶。

保持管線活躍

這個技巧不是什麼秘密旗標——而是拒絕讓媒體工作階段死亡。talavo 攔截頁面的媒體工作階段,當系統在切換到背景時嘗試暫停播放,它讓底層元素保持「運行」而不是讓 WebKit 將其銷毀。實際上,這意味著捕獲作業系統強制的暫停,並立即讓元素繼續運作——如有必要以接近零的播放速率——讓音訊管線保持溫熱並乾淨地恢復,而非被垃圾回收。

除此之外,talavo 將標準 iOS 正在播放控制項(鎖定螢幕、控制中心、AirPods)連接到活躍影片,讓暫停、播放和拖曳進度條的操作感覺像原生媒體應用程式,而非恰好有聲音的網頁。

浮動迷你播放器

背景音訊只是故事的一半。另一半是浮動迷你播放器:一個子母畫面視窗,讓影片在你於另一個分頁閱讀其他內容時持續播放——無需 Premium 訂閱。這與系統 PiP 的概念相同,適用於 talavo 能播放的任何影片。

誠實的注意事項

這是疊加在 WebKit 之上的變通方案,而非私有 API。這意味著兩件事:它保持在網路平台所提供的範圍內,且當 YouTube 重組其播放器內部架構時可能受到影響。當這種情況發生時,我們會修復它——這就是我們更新日誌中點版本更新的主要工作內容。建立在真實瀏覽器引擎之上的好處是,其餘網路在此運行時仍能正常運作。