【ITニュース解説】Video Calls Are Harder Than They Look (Thanks, NAT!)
2025年09月07日に「Dev.to」が公開したITニュース「Video Calls Are Harder Than They Look (Thanks, NAT!)」について初心者にもわかりやすく解説しています。
ITニュース概要
ビデオ通話アプリはローカルでの開発は容易だが、本番環境ではNAT越え、多人数対応、品質維持が課題となる。安定した接続にはSTUN/TURNサーバー、大規模通話にはSFUが必要だ。これらの技術で帯域幅やセキュリティを考慮し、高品質な体験を実現する。
ITニュース解説
ビデオ通話が現代のアプリケーションに不可欠な機能となる中で、ローカル環境で基本的なビデオ通話アプリを作成することは比較的容易だが、本番環境で実際に運用する際には多くの技術的課題に直面する。この課題は、システムエンジニアを目指す上で理解しておくべき重要なポイントである。
まず、ビデオ通話の品質と安定性を左右する基本的な概念として「帯域幅」と「ビットレート」がある。 帯域幅とは、インターネット接続が一度に送受信できるデータ量の最大能力を指す。これは通常、1秒あたりに処理できるデータの量としてMbps(メガビット毎秒)で測定される。たとえば、50Mbpsの帯域幅を持つインターネット接続は、1秒間に50メガビットのデータを送受信できることを意味する。この帯域幅が広ければ広いほど、同時に多くのデータや複数のデバイスがインターネットを利用しても、スムーズな通信が可能になる。 帯域幅は「インターネット速度」とは異なる概念である。帯域幅がインターネット接続の最大容量であるとすれば、インターネット速度は実際にデータが移動する速さに例えられる。インターネット速度は帯域幅によって上限が決まるが、サーバーとの距離やネットワークの混雑状況、利用しているデバイスの数などによって、実際の速度は帯域幅の最大値よりも低下することがある。
一方、ビットレートとは、ビデオやオーディオのストリームにおいて、1秒あたりに送受信されるデータ量そのものを指す。これはkbps(キロビット毎秒)やMbpsで測定される。ビットレートが高いほど、ビデオやオーディオの品質は向上し、より鮮明な映像やクリアな音声が提供される。しかし、高いビットレートはより多くのデータを必要とするため、利用する帯域幅も大きくなる。例えば、360pのビデオ通話であれば約300〜600kbps、720pのHD品質であれば約1.2〜1.5Mbps、1080pのフルHD品質であれば約2〜3Mbps程度のビットレートが必要となる。もしインターネットの帯域幅が、ビデオ通話に必要なビットレートよりも低い場合、映像が途切れたり、ぼやけたり、音声が遅延したりする原因となる。つまり、帯域幅はデータ転送の「供給能力」であり、ビットレートはデータ転送の「需要」であると言える。需要が供給を上回れば、通信品質は劣化する。
次に、ネットワーク環境において重要な役割を果たすのが「NAT(Network Address Translation)」である。NATは、ルーターがプライベートネットワーク内の複数のデバイス(例えば、自宅のWi-Fiに接続された複数のスマートフォンやPC)が、インターネット上でたった一つのパブリックIPアドレスを共有することを可能にする仕組みである。ルーターは、各デバイスのプライベートIPアドレスとポート番号を、インターネットに接続する際のパブリックIPアドレスとポート番号に変換し、外部との通信を仲介する。これにより、限られたパブリックIPアドレスを有効活用できるだけでなく、内部ネットワークの構造を外部から隠蔽し、セキュリティを向上させる効果もある。しかし、このNATの存在が、デバイス間で直接通信を確立しようとする際に複雑な問題を引き起こす場合がある。
ビデオストリーミングの基本的な流れは、まずデバイスのカメラとマイクでオーディオとビデオをキャプチャする。次に、VP8やH.264といったコーデックを使用してデータを圧縮し、帯域幅の使用量を減らす。圧縮されたデータは小さなパケットに分割され、ネットワークを通じて送信される。このリアルタイムで暗号化されたP2P(Peer-to-Peer)通信の確立には、主にWebRTC(Web Real-Time Communication)という技術が使用される。受信側では、これらのパケットが再構築され、デコードされ、最終的にビデオタグなどに表示される。この一連の流れは、同じローカルネットワーク内では比較的スムーズに行われるが、インターネットを介した本番環境でのデプロイでは様々な課題が生じる。
本番環境での主要な課題は、NATとファイアウォールによる接続の阻害、スケーラビリティ、信頼性、セキュリティである。特に、ユーザーが異なるNATタイプや厳格なファイアウォールの背後にいる場合、直接的なP2P接続が困難になることがよくある。 このような状況を解決するために、「STUNサーバー」と「TURNサーバー」が利用される。
STUN(Session Traversal Utilities for NAT)サーバーは、デバイスが自分のパブリックIPアドレスとポート番号を特定するのを助ける役割を持つ。デバイスはSTUNサーバーに「私のパブリックアドレスは何ですか?」と問い合わせ、STUNサーバーはその情報(例: 49.35.21.10:54555)を応答する。この情報を受け取ったデバイスは、そのパブリックアドレスを他のデバイスと共有し、互いに直接接続を試みることができる。STUNサーバーは、デバイスがNATの背後にいる場合でも、外部から見える自身の所在地を把握するために不可欠な存在であり、多くの場合は直接P2P接続を確立するための第一歩となる。一般的に、STUNサーバーは全体の70〜80%のケースでP2P接続を成功させることができる軽量な仕組みである。
しかし、オフィスのような厳格なファイアウォールや特定の種類のNAT(対称型NATなど)が存在する環境では、STUNサーバーを使ってもデバイス間の直接接続ができない場合がある。このような状況で用いられるのが「TURN(Traversal Using Relays around NAT)サーバー」である。TURNサーバーは、デバイス間のデータ転送を中継する役割を果たす。つまり、片方のデバイスから送られたビデオやオーディオのデータは直接もう一方のデバイスに送られるのではなく、一度TURNサーバーを経由して相手に転送される。これは、接続が困難な状況でも確実に通信を確立するための手段となる。しかし、すべてのメディアトラフィックがTURNサーバーを経由するため、通信の遅延が増加し、サーバーの帯域幅や処理能力が必要となるため、運用コストも高くなるという欠点がある。 STUNとTURNの主な違いは、STUNがデバイス間の直接接続を「補助」するのに対し、TURNは直接接続が不可能な場合に通信を「中継」する点にある。ローカル環境でのテストではSTUNのみで十分なことが多いが、多様なネットワーク環境に対応する本番環境では、STUNとTURNの両方を適切に利用することが必須となる。
ビデオ通話の接続フローは、まずデバイスがメディアをキャプチャし、その後、シグナリングサーバー(WebSocketなど)を介して、互いに接続に関する情報(コーデックや機能など)を交換する。この間に、各デバイスはSTUNサーバーに問い合わせて自身のパブリックIPアドレスとポート番号を特定し、これをICE候補として生成する。両デバイスはこれらのICE候補を交換し、直接P2P接続を試みる。この試みが成功すれば、メディアデータはデバイス間で直接送受信される。もし直接接続が失敗した場合、デバイスは最終手段としてTURNサーバーを使用し、TURNサーバーを介してデータの中継を行うことで通信を確立する。この段階的なアプローチにより、さまざまなネットワーク環境下での接続が保証される。
また、グループビデオ通話のような多人数での通信においては、「SFU(Selective Forwarding Unit)」と呼ばれる特殊なサーバーが非常に重要になる。通常のP2P接続(メッシュ型)では、参加者それぞれが他の全員に自身のビデオストリームを直接送信するため、参加人数が増えるほど各参加者のアップロード帯域幅の負担が指数関数的に増大する。例えば、5人通話では各人が4つのビデオストリームを送信する必要がある。SFUを使用する場合、各参加者は自身のビデオストリームをSFUサーバーに一度だけ送信し、SFUサーバーがそのストリームを他の全ての参加者に転送する。SFUはビデオのデコードや再エンコードを行わず、単に転送するだけなので効率的である。これにより、各参加者のアップロード帯域幅の負担が大幅に軽減され、特に多人数でのグループ通話のスケーラビリティが向上する。SFUの利用はサーバーコストを伴うが、本番環境での安定したグループ通話を実現するためには不可欠な要素となる。
帯域幅とビットレートの計算は、インフラ設計において重要である。例えば、720pのビデオ通話に必要なビットレートが1.2〜1.5Mbpsだと仮定する。4人での通話の場合、SFUを使わないメッシュ型接続では、各参加者が3つのストリームを送信するため、約4.5Mbpsのアップロード帯域幅が必要になる。しかし、SFUを使用すれば、各参加者は1つのストリームをSFUに送信し、3つのストリームを受信するだけで済むため、全体の帯域幅使用量は大幅に削減され、より効率的な通信が可能になる。
結論として、ローカル環境で動作するビデオ通話アプリと、実際にインターネット上で多数のユーザーが利用する本番環境のビデオ通話アプリとでは、考慮すべき点が大きく異なる。本番環境では、多様なネットワーク環境下での接続を保証するためのSTUN/TURNサーバー、多人数通話を効率的に処理するためのSFU、帯域幅の変動に対応するためのアダプティブビットレート技術、そしてユーザーのプライバシーとセキュリティを守るための強力な暗号化が必須となる。これらの技術的要素を理解し、適切に設計・実装することが、信頼性の高いビデオ通話サービスを提供する上で不可欠である。