iOSでYouTubeのバックグラウンド再生が実際にどのように機能するか
talavoで最初に試すことの一つは、ビデオを再生中に電話をロックすること — そして音声が続いていることにちょっと驚くことです。普通のiOS Safariではそうなりません。実際に何が起きているかを説明します。正直なバージョンは「設定をオンにした」よりずっと面白いからです。
制約
talavoはページを WKWebView でレンダリングします。これはSafariが使うのと同じWebKitエンジンで、AppleがiOSで許可している唯一のブラウザエンジンです。WebKitはバックグラウンド処理に意図的に積極的です。ウェブビューがフォアグラウンドを離れると、システムはタイマーを制限しメディアパイプラインを停止します。これはバッテリーには良いですが、画面をオフにしてポッドキャスト的なビデオを再生し続けたい人には最悪です。YouTubeは中断のないバックグラウンド再生をPremiumの特典としています。
パイプラインを生かし続ける
トリックは秘密のフラグではなく、メディアセッションを終わらせないことです。talavoはページのメディアセッションを傍受し、システムがバックグラウンドに移行したときに再生を一時停止しようとしても、WebKitがそれを破棄するのではなく基盤となる要素を「動き続ける」状態に保ちます。実際には、OSが強制する一時停止をキャッチして、必要なら再生速度をほぼゼロにしてでも要素を動かし続け、オーディオパイプラインを温かく保って、ガベージコレクションされる代わりにきれいに再開できるようにします。
さらに、talavoは標準のiOS再生コントロール(ロック画面、コントロールセンター、AirPods)をアクティブなビデオに接続し、一時停止、再生、スクラブがウェブページではなくネイティブメディアアプリのように動作します。
フローティングミニプレーヤー
バックグラウンド オーディオ は話の半分です。もう半分はフローティングミニプレーヤー:別のタブで何か読んでいる間もビデオが再生し続けるピクチャー・イン・ピクチャーウィンドウです。Premiumサブスクリプション不要。システムPiPと同じアイデアを、talavoが再生できるすべてのビデオで提供します。
正直な注意点
これはプライベートAPIではなく、WebKitの上に積み重ねた回避策です。つまり2つのことを意味します。ウェブプラットフォームが公開しているものの範囲内に留まること、そしてYouTubeがプレーヤーの内部を変更したときに影響を受ける可能性があること。そのときは修正します。それが更新履歴にあるようなポイントリリースのほとんどがやっていることです。本物のブラウザエンジンの上に構築することの利点は、これが動いている間も残りのウェブが通常通り機能することです。