SFUの仕組み
P2Pと違ってサーバーが配信を代行します。
問題点
映像を変換しないためユーザーごとに配信するビットレートを選択できないことです。
例えば、配信者が1Mbpsで映像を配信したとしても、視聴者の1人が500kbpsしか帯域がない場合は映像が見れなくなります。なので、普通にやるとSFUの制御でが一番状況の悪い人に合わせざるおえなくなってしまいます。
対策
これの解決手法としては、SImulcastになります。配信者が複数画質の映像をSFUに送りSFUは視聴者に最適な映像を送ることで視聴者は配信者よりも帯域が少ない場合でも視聴可能になります。SFUのSimulcastはHLSやMPEG-DASHというアダプティブビットレートをサーバー無変換で実現する技術と言えます。
MultiStream(MultiTrack)
複数の映像音声を一本のPeerConnectionに入れることが可能です。(P2Pの場合はstreamごとにPeerを作る必要があります。)、すでに貼られているコネクションにメディアを追加するので接続処理が不要になります。
Simulcastとは?
複数の画質の映像を送る仕組みです。(複数の画質を同時に圧縮しているとも言えます。)
P2Pで利用されるものではなくSFU向けの機能になります。
2〜4本の映像を同時に送ることが可能なのでハードウェアエンコーダーでも同時に処理する必要があります。
Simulcastのメリット
WebRTCのSFUでよく扱われている技術です。
SFUでは映像変換を行わないのでどうしても複数人が繋いでいる場合は一番帯域が低い人に合わせないといけなかったのですが、Simulcastを使えば配信者は複数の画質の映像を送ることができるので受信者に適した画質の映像を送ることが可能になります。
問題点
一般的なハードウェアエンコーダーは2本しか映像を圧縮できないです。なので実質的に3本以上の映像を送ることができません。
Chrome
M75ではSDPを書き換えることなくSimulcastが利用可能になった。
SFUのOSS
mediasoup
C++、JavaScript(Node.js)で書かれている。ロジックはJSでかけるし、実績も豊富。SFU特化なので便利機能はない。DataChannelにも対応しています。
PornHubのビデオチャットで利用されています。
Janus Gateway
ロジック部分はLuaで書ける。色々なことができるので複雑な作り込みが必要な場合はこれを選ぶ。TwitterのSpacesで利用されています。
Jitsi
Atlassianが買収したが、8x8に売却されました。ロジックはJavaとJNIなので大変。会議サービスを実現したい場合は、便利機能がたくさんあるのでおすすめ。
Pion
Goで書かれている。まだ開発中だが、スケールする箇所までしっかりと作り込まれている。
どれを選んだらいいの?
様々な機能があり多くの場所で利用されているので、Janusを推している人がいる。
この記事へのコメントはありません。