SFU(Selective Forwarding Unit )/MCU(Multipoint Control Unit)とは
P2Pの欠点
P2P通信では、通信を行う相手と直接接続するため、人数が増えて来ると、その分だけ接続する先が増えて、負荷が増えていく。WebRTCでは、通話する相手ごとにメディアストリームをエンコードする必要があるので、相手が増えると当然エンコードの量も増える
そのため、最初からサーバーを経由させて通信することを前提で設計した方がうまくいくパターンもある。サーバー側で録画・音声認識など、様々な負荷機能を提供できるメリットもある
SFU
SFUは、大人数でWebRTCを活用する際に、クライアント側の通信量や負荷を抑えるために用いられる。
SFUでは、受け取ったメディアストリームをそのままコピーし、他の参加者全員に受け流す。そのため、クライアントの上りの量が減り、n人と接続していても1本で済むようになる。 あくまで上りが減るだけで下りはn本のままなので、10人とかの会議になる厳しくなって来る(通信を絞ったり、解像度を下げたりなどの工夫が必要)
一般的に、エンコードとデコードでは、エンコードの方が処理の負荷が高い。なので、負荷の高い方だけ対応した賢い手法である。
Multi Stream機能を用いてると、一つのPeerConnectionに複数のmedia streamを入れるので、上りも下りも同じPeerConnectionで送受信できる。n人と繋がっていても、PeerConnectionは一つ。 Jitsiはそれを実装しているので使える
MCU
MCUも、SFU同様、大人数でWebRTCを活用する際に、クライアント側の通信量や負荷を抑えるために用いられる。
MCUでは、受け取ったメディアストリームを人数分まとめて一つに合成し、ユーザーに送信するものである。
ユーザー側は上りも下りもn本分の負荷だったのが、1本ずつになって非常に負荷が減る。
しかし、一方で、サーバー側は受け取ったメディアストリームをデコードして一本にまとめるためにエンコードして・・・という処理が必要になるため、サーバー側の負荷が非常に高くなる。また、クライアント側で映像個別に操作することができない。
TURNも中継機だけど違いは?
TURNは、あくまでP2Pであり、フルメッシュで振る舞う。その点がSFU,MCUとは違う。
また、TURNはあくまで中継機であり、Peerとして振舞っているわけではない。そのため、暗号化されたWebRTCのデータを見ることはできない。SFU・MCUは中継機ではなく、ユーザ<---SFU/MCU--->ユーザーで、それぞれ接続しているため、Peerとして振舞っている。そのため暗号化されたWebRTCの鍵を持っていて、データを見ることができる。