なぜMetaはリアルタイムビデオ通話にAV1を選んだのか

リアルタイムコミュニケーション(RTC)において、コーデックの選択はユーザー体験を左右する重要な要素です。MetaがAV1に注目した理由は明確です。同じ画質を維持しながら、はるかに少ない帯域幅で済むからです。Metaのオフライン実験では、低スペックおよびミッドレンジデバイスにおいて、H.264/AVCと比較して少なくとも20%のビットレート削減効果が確認されました。ネットワーク環境が悪いユーザーにとって、この差はビデオ通話の品質を左右します。

実際、MetaのRTC製品におけるビデオビットレートは10kbpsから400kbpsの間で変動します。特に100kbps以下の帯域幅で高画質を維持することは非常に難しい課題ですが、AV1はこの領域で優れた性能を発揮します。Messengerアプリで2台のAndroidスマートフォンを使い、H.264/AVCとAV1を100kbpsに制限して比較した結果、H.264/AVCは明らかにぼやけているのに対し、AV1ははるかに鮮明な画質を提供しました。

また、AV1は画面共有のような高周波数コンテンツ(テキストなど)の圧縮にも強みがあります。パレットモード(Palette Mode)とイントラブロックコピー(Intra-Block Copy)といったツールにより、従来のコーデックが苦手とする複雑な画面コンテンツを効率的に処理します。

Network diagram showing bandwidth fluctuation and packet loss during a video call Programming Illustration

AV1導入の険しい道のり:エンコーダー/デコーダー選定から始まる

AV1の利点は明らかですが、RTCに適用する過程は決して平坦ではありませんでした。最初に直面した問題は、エンコーダーとデコーダーの選定です。

低複雑度エンコーダーの必要性

AV1は優れた圧縮効率を提供しますが、その分計算複雑度が高く、モバイルデバイスでの電力消費が増加します。Metaのオフライン実験では、Pixel 8デバイスでのAV1エンコード時の電力使用量がH.264/AVCと比較して14%増加することが確認されました。これはモバイル展開における大きな障壁です。

この問題を解決するため、Metaは低複雑度エンコーダーを採用しました。ポイントは、H.264/AVCと同程度の計算複雑度を維持しながら、AV1の圧縮効率を最大限に引き出すことでした。最新のコーデックが提供するさまざまなプリセットを活用し、デバイス性能に合わせてエンコーダーの複雑度を調整するメカニズムを設計しました。

# エンコーダープリセット選択の例(概念コード)
def select_encoder_preset(device_capability_score):
    """デバイス性能スコアに基づいてエンコーダープリセットを選択する関数"""
    if device_capability_score > 0.8:
        return "high_complexity"  # 高性能デバイス: 最高画質
    elif device_capability_score > 0.5:
        return "balanced"  # ミドルレンジ: バランス
    else:
        return "ultra_low_complexity"  # 低スペックデバイス: H.264と同等の複雑度

デコーダー選定とバイナリサイズ問題

デコーダーはエンコーダーほど複雑ではありませんが、低スペックデバイスでは依然として問題になります。Metaは複数のオープンソースデコーダーを比較した結果、電力効率と安定性に優れたdav1dを選択しました。

もう一つの大きな難関は、バイナリサイズの増加でした。libAOMを例にとると、AV1サポートを追加するとアプリの容量が約1.7MB(圧縮時600kB)増加します。数十億人のユーザーにサービスを提供するMetaにとって、これは決して無視できない数字です。バイナリサイズが大きくなると、アプリのアップデート成功率が低下し、起動時間が長くなり、メモリ使用量やクラッシュ率に悪影響を及ぼします。Metaは動的ダウンロードフレームワーク、ライブラリの最適化、不要なツールの削除など、さまざまな方法でこの問題を解決しました。

Smartphone displaying a video call with AV1 codec quality comparison Development Concept Image

AV1適用範囲の拡大:MLベースのデバイス互換性判定

エンコーダーとデコーダーを選択した後は、どのデバイスでAV1を有効にするかを決定する必要があります。iOSはデバイスの種類が限られているため比較的簡単でしたが、Androidは多数のデバイスモデルがあるため、はるかに難しい問題でした。

Metaは当初、メモリ、発売年、OSバージョンを基準にデバイスを選択しようとしましたが、この方法では信頼性が不十分でした。最終的に、MLベースのデバイス互換性フレームワークを開発しました。このフレームワークは、実際のユーザー統計データに基づいてデバイスのAV1性能を評価します。

# MLベースのデバイス互換性評価の概念コード
import pandas as pd
from sklearn.ensemble import RandomForestClassifier

# ロギングパイプラインで収集された低レベル性能メトリクスを特徴として使用
features = ['cpu_clock_speed', 'thermal_throttling', 'memory_bandwidth', 'gpu_usage']

# 各デバイスのRTC性能スコアを予測するモデルを学習
def train_device_eligibility_model(training_data):
    model = RandomForestClassifier()
    model.fit(training_data[features], training_data['rtc_score'])
    return model

# rtc_scoreが高い場合はAV1エンコード可能、低い場合はH.264を維持
def is_av1_eligible(device_metrics, model):
    rtc_score = model.predict([device_metrics])[0]
    return rtc_score >= 0.8

このモデルは2025年に大幅に改善され、高性能デバイスと低性能デバイスを区別する2層アプローチが導入されました。これにより、AV1の適用範囲を大幅に拡大することができました。

コード複雑度適応型戦略

MLベースのデバイス選定だけでは十分ではありませんでした。A/Bテスト中に、2023年発売のオクタコアスマートフォンでも320x180@15fpsのエンコードをリアルタイムで処理できない現象が発見されました。これは通話中のCPU周波数の制限(スロットリング)が原因です。

Metaはこの問題を解決するために、3つのメカニズムを開発しました。

  1. 適応的エンコーダープリセット調整: エンコード遅延をリアルタイムで監視し、エンコーダーの複雑度を動的に調整
  2. ローカルデバイスのエンコード遅延認識型コーデック切り替え: エンコーダープリセットで解決できない場合はH.264/AVCに切り替え
  3. ピアデバイスのデコード遅延認識型コーデック切り替え: 相手デバイスのデコード遅延をフィードバックし、必要に応じてコーデックを切り替え

これらの適応的戦略により、ミッドレンジデバイスではH.264でエンコードしつつ、AV1でデコードする非対称コーデック設計が可能になりました。これにより、AV1の適用範囲を大幅に拡大することができました。

Server racks representing the infrastructure for real-time communication processing Technical Structure Concept

AV1通話品質の改善:ビットレート制御とエラー耐性

AV1の適用範囲を拡大した後は、通話品質そのものを改善することが次の課題でした。RTCにおいて重要なのは、瞬間的なビットレートのオーバーシュートを防ぐことです。MetaはVBV(Video Buffering Verifier)遅延を指標として、ビットレート制御の精度を評価します。

正確なビットレート制御

VBV遅延は、エンコーダーがフレームをどれだけ速く送信できるかを示す指標です。RTCでは200ms未満のVBV遅延を維持することが重要です。エンコーダーのオーバーシュートが発生するとVBV遅延が増加し、ネットワーク輻輳や映像フリーズにつながる可能性があります。

MetaはVBVバッファの状態を追跡してビットレート割り当てを調整し、キーフレームのビットレートを厳格に制御し、ビットレートのアンダーシュートも防ぐアルゴリズムを開発しました。アンダーシュートは帯域幅推定を歪め、ビットレート上昇を遅らせ、画質低下を引き起こす可能性があります。

エラー耐性:TLとLTR

パケット損失に対応するため、MetaはTemporal Layer(TL)Long-Term Reference(LTR) 技術を活用しました。

  • TL: フレームを時間的階層構造に構成し、基本レイヤーが拡張レイヤーの損失の影響を受けないように設計。損失率が高い場合にのみ適応的に有効化
  • LTR: 古い参照フレームをバッファに保存し、損失発生時に以前に正常に受信されたLTRを基に即座に復元。H.264とは異なり、AV1はLTRを示す明示的なシグナリングが必要なため、RTPヘッダー拡張を通じて実装

まとめ:AV1導入の教訓と今後の方向性

MetaのAV1導入事例は、単なるコーデックの置き換え以上の意味を持っています。低複雑度エンコーダーの設計、MLベースのデバイス互換性判定、適応的コーデック切り替え、精密なビットレート制御とエラー耐性技術は、リアルタイムビデオ通話の品質を決定づける重要な要素です。

特に日本の開発者の皆様にお伝えしたいのは、コーデックの移行は単にライブラリを交換する問題ではなく、システム全体のアーキテクチャ再設計であるという点です。Metaの事例のように、エンコーダー/デコーダーの選択からデバイス互換性、ネットワーク適応、エラー耐性まで、パイプライン全体を考慮した総合的なアプローチが必要です。

AV1の可能性は明らかですが、まだハードウェアサポートが不十分な領域が多くあります。特にグループ通話では、複数のビデオストリームを同時にデコードする必要があるため、より高い性能が要求されます。MetaはSoCメーカーに対し、すべてのデバイス層でハードウェアAV1をサポートするよう働きかけています。

次のステップとしては、AV1のハードウェアアクセラレーション対応の動向を注視し、グループ通話シナリオでの性能最適化方法を研究されることをお勧めします。併せて読みたい記事: スポティファイが広告プラットフォームをマルチエージェントアーキテクチャで再構築した理由

本コンテンツは、信頼性の高い情報源をもとにAIツールを活用して作成され、編集者によるレビューを経て公開されています。専門家によるアドバイスの代替となるものではありません。