見出し画像

WebRTCにおいてP2P/SFU/MCUでビデオ通話品質の差があるか

WebRTC においてP2PとSFUでビデオ品質の差があるかと言われればある。どちらが良いかといえば1:1なのであればP2Pが原則的には良くなると僕は考える。それはなぜか。

第一にWebRTC は相手に届くことを優先した制御を行っている。相手との通信状況が悪ければ解像度を落とす。映像が止まってしまった場合は通信相手に再生を再開するためのフレームをもらう。もし音声が途切れてしまうようであれば遅延を許容し少し溜め込んでから流すことで途切れないようにする。常に相手のことを気にして自分の処理能力も気にしつつ届くように映像を送る。これがWebRTCにおいて非常に優れた点だと僕は考えている。

画像1

映像音声通信の裏側で行われるやり取り

学習に例えるならば、相手が小学生相当ならば小学生用の教科書を高校生相当であれば高校生用の教科書を作って送っているのである。もちろん、状況に合わせて送るものは常に変えている。小学生が通信中に成長すれば高校生用を送るようになるし、その逆もやる。わからないと言われれば教えると言った感じだろうか。

さて状況を見ながら通信するのがWebRTCだと書いたわけだが、P2PとSFUの違いとはなんだったか。

P2Pは必ず1:1になる。たとえ複数人が受信していても受信側は必ず送信側の当人と直接通信してる。先ほどの例えに合わせるとこれはかなり丁寧な個別指導である教科書まで相手向けにつくるのだ。ただし、教師一人で複数人の生徒を直接指導しているのであまり人数が増えると首が回らなくなる。(ので教科書は使い回す。。。

ではSFUはどうだろう、送信者はSFUと通信しSFUはそれを受信者に配ることとなる。送信者と受信者の間に必ずSFUが介している。例えるならば大講堂である、一度に多くの人数を相手することが可能だ。

画像2

さて、では細かな指導はできるのだろうか。答えはとりあえずNoである。全員が理解できるようにするには送り側はレベルを下げなければならない。誰かのわからないに答えていては進まないので、まとまった人数が解らないと手を挙げれば解説し直す。そう、高い品質にするには全員のレベルが高くなければならない。大学のように。

さてインターネットにおいてそれほどの人数で品質が揃うだろうか。答えはもちろん揃わない。品質を保つには落第を出さねばならないのである。だがサービスにおいて落第を出すと補償しなければならないため現実的ではない。そのため低い方に品質を合わせる方が妥当となる。したがってSFUではP2Pほどの品質を出すことは難しい。

画像3

さて、なぜNoにとりあえずとつけたのか、それはP2Pほど細やかではないものの上記を解決する方法があるからだ。

まずはSimulcastこれは送信者が同じ映像から同時に複数の画質の映像をつくってSFUに送り、SFUはその中から受信者の状況に応じた映像を選択的に送っている。これは送信者が複数のレベルの教科書をつくりSFUが相手をみつつ配っているのに等しい。したがって送信者の負荷は多少高くなる。

画像4

次がSVCこれは例えるならば送信者が要約、細かい説明、さらに細かい説明と段落を分けてSFUに送っているのに近い。SFUは相手に応じて要約だけ送るのか、細かい説明まで送るのか、全部送るのかを決めている。Simulcastに比べたときの利点は送信者の負荷や通信量が少なく済むことである。

画像5

これらの技術を用いることでSFUでも受信側の質に合わせてレベル分けをした上で配信することが可能である。双方ともにレガシーなテレビ会議システムにおいては使われている技術で、WebRTCにおいても一部のサービスにおいては使われている。なぜ一部なのかといえば、これらの技術は全てのブラウザが対応しているわけではないからだ。ここにWebRTCの難しい側面がある。

ちなみにSimulcast相当のものはYoutubeを始め遅延が許容されるライブストリーミングサービスにおいては当然のように利用されている。ほら、右下の歯車から解像度選べるじゃないですか。あれですよ。あれ。

さて、P2PとSFUではP2Pの方が品質が原則的によくなるという話をしたが、1:n の場合はSFUの方が品質がよくなるケースが多い。これは単純で上り回線の太さの問題だ。そう、P2Pは全参加者が送信者から直接映像を受信するわけだが、ここでいう送信者はデータセンターの回線を使っているわけではない。一般的な家庭用の回線を使っているのがほとんどであろう。僕の経験上光回線ではそうでもないが、ADSLやモバイルデータ回線はあからさまにインターネットに送る上りの回線は下りより細くされている。というより、そもそもP2Pは標準だとビットレートは2Mbpsくらいで送ってしまうので受信者が5人で10Mbpsとなる。例え光であっても人数が増えると早々に足りなくなる。そうするとビットレートに応じた画質の前述の制御が入ってしまうこととなる。また、そもそもCPU負荷が高くなってしまって制御は入り品質は劣化する可能性も高い。

これに対してSFUを介するのであれば送信者はSFUにだけ送ればよく、上りは一人分の消費だけで済む。配信はデータセンターに設置されたSFUがしてくれる。データセンターのサーバは原則的にデータを配ることが本業なので回線に問題が生じることはないだろう。またSFUは送られてきた教科書をコピーして配っているだけである。送信者のように一生懸命内容を作りながら配っているわけではないので負荷も少ない。映像を作るエンコード処理は配る処理に比べると大変高負荷な処理である。最も配るだけと言っているが、WebRTCは通信の暗号化が標準なのでSFUもせっせと暗号化はしている。

長かったが、ここまででP2Pの質が高くなる理由と人数が増えた場合はSFUのほうが質が高くなる可能性が高い理由をお分かりいただけただろうか。さて、最後にMCUである。結論から言うとMCUはSFU以上の品質は出ない。MCUの処理は縮めて送られてきた写真をデータセンターのサーバで受け取り。引き伸ばした後に再び縮めて受信者に送っているのに等しい。そして、それを受信者は再び引き伸ばして見るのである。品質はどうしても劣化してしまう。では、MCUの方が画質がよくなるシーンがあるのかと問われればある。SFUのように配るだけではなく写真を一度引き伸ばしているので、送信者同様に相手に応じて縮めるサイズを変える細やかな処理が可能だ。そしてもう一つP2PやSFUは参加者が増えると受け取る写真の枚数も増えるがMCUの場合は複数枚の写真を一枚にまとめたうえで送ってくれるため、受信者は常に一度に受け取る写真は一枚となる。これは受信者の負荷を通信回線とCPU使用率の両方でかなり軽減してくれる。この恩恵は非常に大きい。結果として画質は他の方式に比べ劣るがどんな端末でも安定して受信できる可能性が高いために品質は高く感じられる結果になる。

画像6

と言うわけで、結論としては品質のなかでも特に画質について述べるなら、

P2P > SFU > MCU

となる。ただし受信者が4-5人を超えると

SFU > P2P > MCU

となる。そうMCUは複数人の写真を一枚に押し込むので一枚で見たときの質は低いのだ。しかし前出の通り最も多くの人に届くのはMCUである。

さて、品質の話はここまで。ここから残りの半分はビジネスの側面を絡めた話をするので、有料にさせてもらいました。とはいえ、ここまで読めた皆様であれば当然の話なので答え合わせ程度だと思って購入してください。もちろん、ここまでの説明でお金払ってもいいと感じたなら払ってくれてもいいんですよ!

ここから先は

2,673字 / 4画像

¥ 500

この記事が気に入ったらチップで応援してみませんか?