ADR-006: FEC(前方誤り訂正)採用
Context
インターネット越しの音声通信ではパケットロスが発生する。
パケットロス対策の選択肢:
- 無視: ロスした音声は無音またはノイズになる
- 再送(ARQ): 遅延が大きくなる
- 補間(PLC): 推測で補完、音質劣化
- FEC(前方誤り訂正): 冗長データで復元
要件:
- リアルタイム性を損なわない(再送は不可)
- 音の途切れ(バツッという音)を防ぐ
- 遅延増加を最小限に
Decision
FEC(前方誤り訂正)を採用する。
Consequences
FEC方式
| 方式 | 特徴 |
|---|---|
| XORベース | シンプル、1パケットロスまで復元可能 |
| Reed-Solomon | 複雑、複数パケットロスに対応 |
初期実装はXORベースとし、必要に応じてReed-Solomonに拡張する。
パラメータ
| パラメータ | デフォルト値 | 説明 |
|---|---|---|
| 冗長度 | 10% | 10パケットにつき1パケットのFECデータ |
| グループサイズ | 5 | 5パケットをグループ化してFEC計算 |
遅延への影響
FECによる遅延増加は1フレーム分(約2.67ms @ 128samples/48kHz)。
パケット: [1] [2] [3] [4] [5] [FEC]
^
FECパケットは5パケット目の後に送信
受信側はFECパケット到着まで待機する必要があるため、1フレーム分の遅延が追加される。
設定可能項目
| 項目 | 選択肢 |
|---|---|
| FEC有効/無効 | ユーザー設定可能 |
| 冗長度 | 0% / 10% / 20% / 33% |
| グループサイズ | 3 / 5 / 10 |
超低遅延プリセットではFECを無効化できる。
補完戦略(PLC)
FECで復元できなかったパケットには、簡易的なPLC(Packet Loss Concealment)を適用する:
- 直前サンプルの減衰: 直前の音声を徐々に減衰させてフェードアウト
- 無音挿入: 最後の手段として無音を挿入
「バツッ」というクリックノイズを防ぐため、急激な波形変化を避ける。