事例紹介

Instagram と Facebook が Media3 PreloadManager で即時再生を実現し、ユーザー エンゲージメントを向上

所要時間: 4 分

ソーシャル メディアのダイナミックな世界では、ユーザーの関心はすぐに移り変わります。Meta のアプリ(Facebook と Instagram)は、世界最大規模のソーシャル プラットフォームであり、世界中の数十億人のユーザーに利用されています。Meta にとって、動画をシームレスに配信することは単なる機能ではなく、ユーザー エクスペリエンスの中核です。ショート動画(特に Facebook ニュースフィードと Instagram リール)は、エンゲージメントの主な要因となっています。クリエイティブな表現と迅速なコンテンツ消費を可能にし、世界中の人々をつなぎ、楽しませています。

このブログ投稿では、Meta が真のインスタント再生を実現することで、数十億人のユーザーの動画再生をどのように変革したかについて説明します。

ショート動画のレイテンシ ギャップ

ショート動画は、ユーザーがフィードをすばやくスクロールするため、非常にペースの速いインタラクションにつながります。常に変化するフィードで動画間のシームレスな移行を実現するには、瞬時に再生するための独自の課題があります。そのため、従来のディスク キャッシュや標準的なリアクティブ再生戦略を超えるソリューションが必要です。

Media3 PreloadManager による今後の展望

ショート動画コンテンツの増加による視聴習慣の変化と、従来の長尺動画再生アーキテクチャの制限に対応するため、Jetpack Media3 に PreloadManager が導入されました。このコンポーネントを使用すると、デベロッパーはディスク キャッシュを超えて、ユーザーが再生ボタンを押す前にメディアをメモリに準備しておくためのきめ細かい制御とカスタマイズを行うことができます。PreloadManager を使用したメディア再生に関する技術的な詳細については、こちらのブログシリーズをご覧ください。

Meta が真のインスタント再生を実現した方法

既存の複雑さ

以前は、Meta は動画配信にウォームアップ(プレーヤーの準備)とプリフェッチ(ディスクへのコンテンツのキャッシュ)を組み合わせて使用していました。これらの方法はネットワーク効率の向上に役立ちましたが、大きな課題も生じました。ウォームアップでは、複数のプレーヤー インスタンスを順番にインスタンス化する必要があったため、大量のメモリが消費され、プリロードできる動画は数本に制限されていました。この高いリソース需要は、現代の高速スクロールのソーシャル フィードで期待されるインスタント再生を実現するために、よりスケーラブルで堅牢なソリューションを適用できることを意味していました。

Media3 PreloadManager を統合する

真のインスタント再生を実現するため、Meta の Media Foundation Client チームは Jetpack Media3 の PreloadManager を Facebook と Instagram に統合しました。同社は、プリロード システムと再生システムを統合するために DefaultPreloadManager を選択しました。この統合には、PreloadManager インスタンスと ExoPlayer インスタンス間で効率的なリソース共有を可能にするために、Meta の既存のアーキテクチャをリファクタリングする必要がありました。この戦略的な移行により、プリロード タスクを並列化し、単一のプレーヤー インスタンスを使用して多数の動画を管理できるという、アーキテクチャ上の重要なメリットが得られました。これにより、プリロード容量が大幅に増加し、以前のアプローチで発生していたメモリの複雑さが解消されました。

colinKho.png

最適化とパフォーマンス調整

その後、チームは広範なテストとイテレーションを実施し、Meta の多様なグローバル デバイス エコシステム全体でパフォーマンスを最適化しました。最初の積極的なプリロードでは、メモリ使用量の増加やスクロール パフォーマンスの低下などの問題が発生することがありました。この問題を解決するため、メモリを慎重に測定し、デバイスの断片化を考慮して、特定の UI パターンに合わせてシステムを調整することで、実装を微調整しました。

特定の UI パターンに合わせた実装のファインチューニング

Meta は、アプリごとに異なるプリロード戦略を適用し、各アプリの特定の UI パターンに合わせて動作を調整しました。

  • Facebook ニュースフィード: UI では、現在表示されている動画が優先されます。マネージャーは、ユーザーがスクロールを一時停止した瞬間に動画が開始されるように、現在の動画のみをプリロードします。この「現在のみ」に焦点を当てることで、ユーザーが動画の間に多くの静的な投稿を見る可能性がある環境で、データとメモリ使用量を最小限に抑えることができます。現在、このシステムは表示中の動画のみをプリロードするように設計されていますが、今後表示される動画もプリロードするように調整できます。
  • Instagram のリール: ユーザーが縦方向にスワイプする、純粋な動画環境です。この UI のために、チームは「隣接プリロード」戦略を実装しました。PreloadManager は、現在のリールの直後の動画をメモリに保持します。この双方向のアプローチにより、ユーザーが上下どちらにスワイプしても、遷移は瞬時にスムーズに行われます。その結果、ユーザーの再生開始時間や最初のフレームが表示されるまでの時間など、ユーザー体感品質(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 間のリソース共有が改善され、1 つのプレーヤー インスタンスで複数の動画を管理できるようになります。これにより、エンジニアリング チームが長期にわたって保守と最適化を容易に行えるだけでなく、最新の機能アップデートのメリットも享受できる、将来にわたって有効なコードベースが実現します。

  • デバイスを認識した最適化を実装する

ミドルエンドからローエンドのモデルを含むさまざまなデバイスでテストすることで、市場リーチを拡大します。CPU、メモリ、I/O などのリアルタイム シグナルを使用して、機能とリソースの使用量を動的に調整します。

詳細

詳細と利用方法については、 

これで、インスタント再生の秘訣がわかりました。ぜひお試しください。

作成者:
続きを読む