メインコンテンツまでスキップ

ADR-002: カスタムUDPプロトコル採用

Context

リアルタイム音声通信のネットワークプロトコル選択が必要。

選択肢:

  • WebRTC: 標準規格、NAT越え対応、ブラウザ互換
  • カスタムUDP: 最小オーバーヘッド、完全な制御
  • TCP: 信頼性あり、遅延が大きい

要件:

  • 片道遅延を最小化(アプリ起因で10ms以下目標)
  • NAT越え対応
  • 暗号化対応

Decision

カスタムUDPプロトコルを採用する。

NAT越えにはICE(STUN/TURN)を使用する。暗号化にはDTLSを使用する。

Consequences

メリット

  • 最小遅延: WebRTCのオーバーヘッド(SRTP、RTCP等)を回避
  • 完全な制御: パケットフォーマット、FEC戦略を自由に設計
  • 音声専用設計: パケットヘッダ12バイト、単一データタイプで音声に特化した設計が可能
  • デバッグ容易: プロトコルの全挙動を把握

デメリット

  • 実装コスト: NAT越え、暗号化を自前実装
  • 相互運用性: ブラウザ版を作る場合は別途WebRTC対応が必要
  • 保守コスト: プロトコルの進化を自前で管理

WebRTCを不採用とした理由

  1. 遅延: WebRTCのメディアスタックは汎用的であり、音楽セッション向けの超低遅延最適化が困難
  2. 複雑性: SDP、ICE、DTLS-SRTP、SCTP等の複合システムで、問題切り分けが難しい
  3. 制御: Jitterバッファ、FEC戦略等を細かく制御したい

リスク軽減

  • ICEライブラリ(webrtc-ice等)を活用してNAT越えの実装コストを軽減
  • DTLSライブラリ(rustls + webrtc-dtls等)を活用