なぜMetaはAV1に注目したのか
リアルタイムビデオ通話(RTC)において最も重要なのは、少ない帯域幅で同等の画質を維持することです。Metaのオフライン実験では、AV1はH.264/AVCと比較して最低20%のビットレート削減を達成しました。特にローエンドおよびミッドレンジデバイスでも一貫した結果が得られています。
問題は実際のネットワーク環境です。特に新興市場のRTC環境では、ビットレートが10kbpsから400kbpsの間を変動します。100kbps以下でも良好な画質を維持することが重要な課題であり、AV1はこの領域でH.264に対して明確な優位性を示しました。
実際のA/Bテストでは、100kbpsに制限した場合、H.264の映像はぼやけて見えたのに対し、AV1の映像ははるかに鮮明に保たれました。
さらにAV1は、**パレットモード(Palette mode)とイントラブロックコピー(Intra-block copy)**という強力なツールをメインプロファイルで標準サポートしています。これは画面共有やテキストの多いコンテンツ(高周波成分)の圧縮に優れた性能を発揮します。従来のコーデックがテキストのにじみに弱かった点を考えると、業務用ビデオ会議での体感品質向上は大きいと言えるでしょう。
要点まとめ
- AV1 vs H.264: 同一画質で20%以上のビットレート削減
- 低帯域幅(100kbps以下)環境で画質優位が明確
- 画面共有/テキストコンテンツに特化したパレットモード、イントラブロックコピーをサポート
これらの利点は、Python 3.14.3リリース!知っておくべき主要な変更点と実務への影響で解説した最新技術トレンドとも合致し、リアルタイムコミュニケーションのパラダイムシフトを示唆しています。

導入プロセスにおける3大难关と解決戦略
1. エンコーダ/デコーダの選定と電力効率
AV1は高度なコーディングツールによりエンコードの複雑度が高くなります。オープンソースのAV1エンコーダをPixel 8でテストしたところ、H.264と比較して消費電力が14%増加しました。モバイルデバイスでは深刻な問題です。
解決策: Metaは独自の低複雑度(Low-Complexity)エンコーダを採用しました。H.264ベースラインと同等の消費電力を維持しながらAV1の圧縮効率を得るために、ウルトラローコンプレキシティプリセットを開発しました。デバイス性能に応じてエンコーダプリセットを動的に調整するメカニズムも併せて適用しています。
# エンコーダプリセット動的調整の擬似コード (実際のMeta実装はC++ベース)
# ローエンドデバイスでAV1エンコードの複雑度をH.264レベルに下げる概念
def select_encoder_preset(device_capability_score):
"""デバイス性能スコアに基づきAV1エンコーダプリセットを選択"""
if device_capability_score < 30: # ローエンド
return "ultra_low_complexity" # H.264レベルの複雑度
elif device_capability_score < 70: # ミドルレンジ
return "low_complexity"
else: # ハイエンド
return "high_quality"
def adaptive_preset_adjustment(encoding_latency_ms):
"""リアルタイムエンコードレイテンシに基づくプリセット調整"""
TARGET_LATENCY_MS = 150
if encoding_latency_ms > TARGET_LATENCY_MS * 1.5:
# エンコードが遅すぎる場合は複雑度を下げる
return "reduce_complexity"
elif encoding_latency_ms < TARGET_LATENCY_MS * 0.7:
# 余裕があれば複雑度を上げて画質改善
return "increase_quality"
else:
return "maintain"
デコーダはdav1dを選択しました。複数のオープンソースデコーダをA/Bテストした結果、電力効率と信頼性で最も優れたパフォーマンスを示し、通話可能時間も延長されました。
2. バイナリサイズの問題
libAOMベースでAV1サポートを追加すると、アプリの容量が**1.7MB(圧縮時600kB)**増加します。数十億ユーザーを抱えるサービスでは、このサイズがアップデート成功率、アプリ起動時間、メモリ使用量に悪影響を及ぼす可能性があります。600kBの増加は大規模組織の1年分のバイナリサイズ予算を消費するレベルです。
解決策:
- 動的ダウンロードフレームワーク → 失敗率が高く断念
- 直接バイナリ最適化: 量子化マトリックス(QM)ツールがライブラリサイズの10%を占有 → 最適化で半分に削減
- dav1dプロジェクトにサイズ最適化をコントリビュート
- 使用しないツールをライブラリから完全除去 (QM除去で60kB確保)
- プラットフォーム内蔵コーデックサポートを活用
3. デバイス互換性とMLベースの選別
Androidはデバイス種類が多すぎるため、単純にメモリや発売年で互換性を判断できませんでした。Metaは機械学習ベースのデバイス資格フレームワークを自社開発しました。
# MLベースのデバイスAV1性能スコア算出の概念
# 実際のモデルは大規模ログデータに基づいて学習
def calculate_rtc_score(low_level_stats):
"""
低レベル性能統計に基づくAV1性能スコア算出
Args:
low_level_stats: CPUクロック、GPU性能、メモリ帯域幅など
Returns:
rtc_score (0~100): デバイスのAV1性能スコア
"""
features = {
'cpu_freq_stability': low_level_stats['cpu_freq_stability'],
'gpu_compute_units': low_level_stats['gpu_compute_units'],
'memory_bandwidth': low_level_stats['memory_bandwidth'],
'thermal_throttle_ratio': low_level_stats['thermal_throttle_ratio']
}
# 実際にはGBM(Gradient Boosting Machine)または深層ニューラルネットワークを使用
score = model.predict(features)
return score
# 2階層(Two-Tier)アプローチ
# Model V1.1: 広範囲のデバイスサポート開始
# Model V2: ハイエンド/ローエンドデバイスを区別 (2025年8月リリース)
このフレームワークにより、大多数のモバイルデバイスでAV1を有効化することができ、継続的なデータ収集でモデルを改善中です。

ビットレート制御とエラーレジリエンス: RTCの核心
正確なビットレート制御 (Rate Control)
RTCでは瞬間的なビットレートオーバーシュートがネットワーク輻輳と相手側の映像停止を引き起こします。MetaはVBV(Video Buffering Verifier)遅延時間を指標として使用しています。
VBV遅延時間が200msを超えるとユーザーエクスペリエンスに悪影響を及ぼします。
主な最適化:
- VBVバッファ状態を追跡し、オーバーシュート発生時に後続フレームのビットレートを削減
- キーフレームのビットレートを厳格に制御 (一般的なエンコーダはキーフレーム品質を高めようとする傾向がある)
- アンダーシュートも問題: 過度に保守的な割り当ては帯域幅推定を歪め、画質劣化を引き起こす
- AV1のRPR(Reference Picture Resampling)機能を活用: 解像度変更時にキーフレームなしで遷移可能 → ビットレートスパイクと映像停止を削減
エラーレジリエンス (Error Resilience)
パケットロスが発生すると依存関係チェーンが切断され、映像が停止します。Metaは2つのメカニズムを適用しました。
- Temporal Layer (TL)
# Temporal Layerベースの適応的エラーレジリエンス
# TL有効化/無効化ロジックの概念
def should_enable_temporal_layer(packet_loss_rate, rtt_ms):
"""ネットワーク状態に応じてTemporal Layerの有効化を決定"""
if packet_loss_rate > 0.05 or rtt_ms > 200:
return True # 損失/遅延が多い場合はTLをオンにして復元力を確保
else:
return False # 安定したネットワークではTLをオフにして圧縮効率を維持
- Base Layer(低フレームレート)はEnhancement Layerに依存しない
- FEC(Forward Error Correction)をBase Layerにのみ適用
- RTTが低い場合のみEnhancement Layerを再送
- Long-Term Reference (LTR)
LTRは参照フレームをバッファに長期間保存し、損失発生時に迅速に再同期します。MetaはH.264とは異なり、明示的なLTRインジケータを独自のRTPヘッダ拡張に追加し、ネットワークレイヤーがLTRフレームを認識してACKを送信できるようにしました。
# LTRベースの損失回復の概念
def handle_packet_loss(lost_frame_id):
"""パケットロス時にLTRP(Long-Term Reference Predicted)フレームを要求"""
if has_acked_ltr_in_buffer():
# 最も最近ACKされたLTRを参照してLTRPフレームを生成
request_ltrp_frame()
else:
# LTRがない場合はキーフレームを要求 (コスト大)
request_key_frame()
LTRはキーフレームよりも効率的ですが、古い参照フレームによる圧縮効率低下を防ぐために、定期的に高品質フレームをLTRとしてマーキングする戦略を採用しています。
非対称コーデック設計 (Asymmetric Codec)
ミッドレンジデバイスはAV1エンコードはできないがデコードは可能な場合が多くあります。これを活用し、ミッドレンジデバイスはH.264でエンコード→送信、ハイエンドデバイスからAV1を受信→デコードする非対称設計を適用しました。これによりAV1カバレッジを大幅に拡大しました。
合わせて読みたい記事

まとめ: 日本市場への示唆と今後の展望
日本の開発者への示唆
-
リアルタイムコミュニケーションサービスを開発しているなら、AV1導入を積極的に検討すべき時期です。特にモバイル環境での低帯域幅最適化は競争力の核となり得ます。
-
MLベースのデバイス互換性評価は、単にOSバージョンや発売年で判断する従来の方法よりもはるかに精緻です。自社サービスに合わせた軽量MLモデルの構築を検討してみてください。
-
非対称コーデック設計は、全ユーザーに最高スペックを強要せずにサービス品質を高められる実用的な戦略です。Qiitaでも注目されているアプローチです。
注意点
- AV1エンコードは依然として消費電力が大きいため、バッテリー効率が重要なモバイルアプリでは慎重な導入が必要です。
- バイナリサイズの増加は無視できない要素です。特に日本のモバイルアプリ市場では、アップデート成功率に直接的な影響を与える可能性があります。
- ハードウェアAV1サポートが普及するまでは、ソフトウェアエンコードの限界を認識すべきです。特にグループコールでは複数ストリームの同時デコードが必要なため、より困難です。
次のステップとしての学習方向
- AV1コーデックの内部動作原理を深く理解したい場合は、AOMediaの公式ドキュメントとlibAOMのソースコードを分析してみてください。
- WebRTCとの統合: AV1をWebRTCパイプラインにどう統合するか研究するのも良いでしょう。
- 次世代コーデック: AV2の標準化作業が進行中です。AV1を理解すればAV2導入にも有利です。
Metaの事例は単なるコーデックの置き換えではなく、システム全体を再設計するプロセスであることを示しています。皆さんのサービスにすぐに適用するのは難しいかもしれませんが、この記事で扱った問題認識と解決方法論はきっと大きな助けになるはずです。