WebRTC を使用して複数のサーバー間で対話を行う際、ネイティブの WebRTC 統計情報は最初のホップ(つまり、クライアントから最初のサーバーまで)の遅延データのみを提供します。この統計情報は、実際の遅延状況を包括的に反映することができません。より正確なエンドツーエンドの遅延測定を得るためには、以下のいくつかの側面を考慮する必要があります:
- 最初のクライアントから最初のサーバーまでの遅延。
- 各サーバー間の遅延。
- 最後のサーバーからターゲットクライアントまでの遅延。
これにより、全体の通信リンクの遅延状況をより包括的に理解することができます。
エンドツーエンドの遅延を測定することははるかに困難です。なぜなら、それは WebRTC スタックによって自動的に提供されるものではないからです。
全体の遅延(キャプチャとレンダリングエンドによる遅延を含む)を測定するには、WebRTC getStats API が提供するいくつかの追加指標を計算に含めることができます。例えば:
- jitterBufferDelay:ジッターバッファの遅延。
- playoutDelay:再生遅延。
- packetSendDelay:パケット送信遅延。
これらの指標は、キャプチャから最終レンダリングまでの全体の遅延リンクをより包括的に評価するのに役立ちます。
あるシーンでは、前処理メディア部分も追加の遅延を引き起こすことがあります。例えば:
- 美容、フィルター:ビデオをキャプチャした後に画面を美化し、エフェクトを追加するために追加の計算が必要で、処理時間が増加します。これはライブ配信シーンでよく使用されます。
- バーチャル背景:キャプチャした画面の背景をぼかす処理で、ビデオ会議シーンでよく使用されます。
- 合流融屏:複数のキャプチャ画面を結合して単一の画面にすることも、ある程度の遅延を引き起こします。
- AI および CV 処理:顔認識、姿勢認識、物体認識などのコンピュータビジョンアルゴリズムは、遅延を大幅に増加させます。
- 音声関連:エコーキャンセリング、ノイズ抑制などの処理も一定の音声遅延を引き起こします。
上記の遅延に加えて、キャプチャとレンダリングを実行するソフトウェアも遅延を引き起こす可能性があります。
ほとんどの場合、測定されるのは往復時間(RTT)であり、それを 2 で割ることで片道遅延の良好な推定値とします。この方法は、実際のアプリケーションで、あるポイントから別のポイントへの遅延を推定するためによく使用されます。
キャプチャ遅延(Capture Delay):
入力デバイス(カメラやマイクなど)からデータをキャプチャし始めてから、データがアプリケーションに送信されるまでの時間。
エンコーディング遅延(Encoding Delay):
データが圧縮形式にエンコードされるまでの時間。これには、ビデオまたは音声ストリームのエンコードプロセスが含まれます。
伝送遅延(Transmission Delay):
データが送信元から受信先に送信されるまでの時間。これには、ネットワーク伝送時間および中間サーバーの処理時間が含まれます。
ジッターバッファ遅延(Jitter Buffer Delay):
受信側で、ジッターバッファはネットワークのジッタによって引き起こされる遅延の変動を平滑化するために使用され、その際に引き起こされる遅延時間。
再生遅延(Playout Delay):
受信側でデータを受信してから再生を開始するまでの時間。これには、受信およびデコードプロセス中の遅延が含まれます。
デコーディング遅延(Decoding Delay):
データがエンコード形式から再生可能な形式にデコードされるまでの時間。
レンダリング遅延(Rendering Delay):
デコードからデータが実際にレンダリングまたは表示されるまでの時間。これには、画面のリフレッシュおよび画像のレンダリングの時間が含まれます。
往復時間(Round-Trip Time, RTT):
送信元からデータを送信し、受信先で受信し、受信先から送信元に戻るまでの総時間。通常、片道遅延の半分を推定するために使用されます。
これらの要因に対処するために、一連の関連する最適化措置を提案します:
1. 分散サービスの展開#
目標:グローバルなサーバーレイアウトを最適化し、ネットワーク遅延を減少させ、サービスの可用性と性能を向上させる
- 近接接続と配信:グローバルに地域サーバーを展開し、国を越えた接続による遅延を減少させる
- サービス間のルーティングホップ数を減少させる
- 最適なサーバーパスを選択する
- 負荷分散を実現する:ユーザーリクエストを合理的に配分し、単一のサーバーに過度の負担をかけないようにする
2. ネットワークレベルの最適化#
目標:ネットワーク伝送の質と効率を向上させる
- リンク品質の動的監視
- 低品質リンクを特定し回避する
- アクセスサービスを最適化する
3. アプリケーションレベルの最適化#
目標:アプリケーションの処理効率を向上させ、遅延を減少させる
3.1 パフォーマンス最適化#
- データコピーを減少させる
- 不要な計算と処理時間を減少させる
- アセンブリまたはマルチメディアアセンブリ命令を使用してデータの直列並行処理能力を向上させる
3.2 ジッターバッファ最適化#
目標:ネットワークのジッタと再生の滑らかさをバランスさせる
- ジッターバッファのサイズを動的に調整する:現在のネットワークのジッタ状況に応じて調整し、ネットワークの変動による遅延を減少させる
- バッファ時間を最小化する:滑らかな再生を保証しつつ、ジッターバッファ時間をできるだけ短縮する
4. メディア処理の最適化#
目標:メディア処理の効率を向上させ、異なるネットワーク環境に適応する
- ハードウェアアクセラレーション:GPU、FPGA、または専用ハードウェアアクセラレーター(ハードエンコーディング / デコーディング)を使用してメディアのエンコードと処理を行い、CPU の負担を減少させる
- アダプティブビットレート:ネットワーク条件に応じてビデオ品質(解像度 / フレームレート)とビットレートを動的に調整する
- インテリジェントエンコーディング:より効率的なエンコーディングアルゴリズム(ROI エンコーディング)やエンコーダー(AV1、VP9、H.265 など)を使用し、品質を保証しつつデータ量を減少させる
5. 伝送の最適化#
目標:データ伝送の効率と安全性を向上させる
- SRTP 暗号化の最適化:より効率的な暗号化アルゴリズムを使用するか、暗号化の実装を最適化し、暗号化と復号化による遅延を減少させる
- パッケージサイズを減少させる:適切にデータパッケージのサイズを減少させ、ネットワーク伝送中の遅延を低減させる
6. P2P の最適化#
目標:サーバーの負担を減少させ、ピアツーピア通信の効率を向上させる
- 直結パス:可能な限り P2P(ピアツーピア)接続を使用し、サーバーを経由する中継を避ける
- ICE 候補の優先選択:ICE 候補の交渉において、遅延が最も少ないパスを優先的に選択する
7. ユーザー体験の最適化#
目標:ユーザーの満足度を向上させ、知覚遅延を減少させる
- 遅延隠蔽技術:補間、予測などのさまざまな遅延隠蔽技術を実施し、ユーザー体験を改善する
- UI/UX の最適化:迅速に応答するユーザーインターフェースを設計し、知覚遅延を減少させる
- ネットワーク接続:可能な限り有線ネットワークを使用し、相対的に WIFI や 4/5G よりも高い安定性を確保する
8. ネットワークセキュリティの最適化#
目標:安全性を保証しつつ、性能への影響を最小限に抑える
- ファイアウォールルールの最適化:セキュリティ対策がネットワーク性能に過度の影響を与えないようにする
- 効率的な暗号化アルゴリズムの使用:迅速に暗号化と復号化ができるアルゴリズムを選択し、セキュリティ処理による遅延を減少させる