Simulcast について

最終更新日

2019-05-24

Simulcast とは

Simulcast は配信者が複数画質の映像を送るという仕組みです。P2P で利用されるのではなく SFU 向けの機能です。

SFU では映像を変換しないためユーザごとに配信されるビットレートを選択できません。例えば配信者が 1Mbps で映像を配信したとしても、 視聴者の 1 人が 500kbps しか帯域がない場合は映像を見ることができなくなります。

これを解決するのが Simulcast です。配信者が複数の画質の映像を SFU に送り SFU は視聴者に最適な映像を送ることで、視聴者は配信者より帯域が少ない場合でも視聴が可能になります。 HLS や MPEG-DASH で言うアダプティブビットレートをサーバ無変換で実現する技術です。

Simulcast の実装

WebRTC の Simulcast 実装は二種類あります。一つは Google 独自の機能で Chrome / Safari / Edge が実装しています。 もう一つは IETF や W3C の仕様に合わせた実装で Chrome / Firefox / Edge が実装しています。

Google 独自

ssrc-group ベース Simulcast と呼ばれています。この仕組は Google 独自で作り上げた仕組みのため、標準化されていません。 そのため今後は標準化された仕組みに切り替えられていきます。

また、この仕組を利用するには SDP を加工する必要があり、かなり手間がかかる仕組みになっています。

SDP の a=ssrc-grou: SIM という機能を利用します。

標準化

rid ベース Simulcast と呼ばれています。この仕組は標準化が進んでおり、今後は Simulcast といえばこちらの機能になります。Google 独自機能は廃止されていく方向です。

SDP の a=rida=simulcast を利用できます。 JavaScript では setParameterssendEncodings を利用することでクライアントから解像度、ビットレート、フレームレートなどを指定可能です。

Simulcast の負荷

配信する解像度に依存しますが、基本的には 1/4 と 1/8 の解像度を配信するため、30% 程度の CPU 使用率アップと考えてもらって構いません。

Simulcast でできること

rid ベース Simulcast と SFU での利用を前提としています

  • クライアント側での解像度、ビットレート、フレームレート、アクティブの有無が指定可能

  • Offer でクライアントに対して Simulcast を要求できる

  • 最大 4 種類までの画質を指定できる

  • 同一解像度でフレームレートだけが異なるといった事も可能