スポットライト機能

警告

スポットライト機能は実験的機能のため正式版では仕様が変更される可能性があります

正式版リリースに向けて

スポットライト機能は録画機能を搭載したタイミングで正式リリース予定です。

概要

WebRTC SFU サーバを利用して 50 名で会議を行う場合、各参加者は自分以外の 49 名分の音声と映像を常に受信し続ける必要があります。 また、WebRTC SFU サーバも、常に 50 名分の音声や映像を受信し、配信し続ける必要があります。

ところが実際は 50 名の会議であっても、ひとつのトピックに対して発言している人はせいぜい 2 名から 3 名で、 また、映像も常に参加者全員のものでなくとも、その時点でアクティブに発言している人の音声と映像のみで十分というケースも多いです。

この スポットライト機能 は、一定の音量を超えて音声を発している参加者の音声や高画質映像を配信する機能です。 それ以外の参加者は音声のない低画質映像で配信します。

この仕組を使うことでクライアントの負荷を抑え、同時に 50 人を画面に表示することが可能になります。

配信されている参加者が参加者の中でスポットライトがあたっているような形になることから、スポットライト機能と名付けました。

スポットライトレガシーとの違い

スポットライトレガシーとは以下の点で異なります

  • サイマルキャストに対応しているブラウザのみで利用可能です

    • 2020 年 9 月時点では Chrome と Edge のみです

  • 利用できるコーデックが VP8 または H.264 となります

  • スポットライトレガシーでは接続時にアクティブ数の ontrack が上がりましたが、スポットライトでは参加/離脱時に ontrack が上がります

  • スポットライトレガシーではアクティブではない人は配信されていませんでしたが、スポットライトでは低画質&低 FPS での映像のみを受信します

  • スポットライトレガシーでは自分の映像が配信されていましたが、スポットライトでは自分の映像は配信されません

仕組み

開始前に、アクティブな人数の最大を決めます。映像の切り替わりなどを考えると 2-3 人あたりが無難だと思います。

ここではアクティブな人数を 2 人とします。

この機能を利用した場合は、音声を発していない参加者の映像は低画質で配信され、音声は配信されません。

最初に A さんが、一定の音量を超えて発言したタイミングで、A さんの映像が高画質になって配信されます。

次に B さんが、一定の音量を超えて発言したタイミングで、B さんの映像も高画質になって配信されます。

次に一定の音量を超えて発言したのが C さんであれば、A さんと B さんの話していた時間が 少ないほうが低画質に戻り、音声が配信されなくなり、 C さんの映像が高画質になって配信され、音声が配信されます。

その後は同じように、直近で (一定の音量を超えて) 発言した 2 人分の映像が高画質で配信され、音声が配信されます。 それ以外の参加者の映像は低画質、音声はなしで配信されます。

注意

Chrome と Edge で動作します

現時点では Chrome と Edge に対応しています。

SDK への対応

現時点では JavaScript のみが対応しており、 iOS、Android、Unity の SDK は正式対応しておりません。

もし必要があればそれぞれの Discord へご相談ください。

iOS と Android と Unity の SDK 対応は正式版リリース後に予定しています。

録画機能には対応しておりません

現時点では録画機能には対応しておりません。

RTP 転送には対応しておりません

現時点では RTP 転送には対応しておりません。

仕様

sora.conf

  • sora.config にて spotlight_legacyfalse に設定する

    • これは必須です

spotlight_legacy = false

アクティブな配信数

アクティブな配信数はチャネル ID ごとに 1 から 8 までのいずれかを選択可能です。

デフォルトのアクティブ数は 3 です。

シグナリング

  • シグナリングの type: connectmultistreamsimulcastspotlighttrue に設定する

    • これは必須です

  • シグナリングの type: connectspotlight_number で 1 ~ 8 の値を指定する

    • これはオプションです

その他の項目は シグナリング を参照ください。 以下に、 connect の例を示します。

"type": "connect"

アクティブ数はデフォルトの 3

{
    "type": "connect",
    "channel_id": "sora",
    "role": "sendrecv",
    "spotlight": true,
    "simulcast": true,
    "multistream": true,
    "video": {
        "codec_type": "VP8",
        "bit_rate": 800
    }
}

アクティブ数は指定した値の 5

{
    "type": "connect",
    "channel_id": "sora",
    "role": "sendrecv",
    "spotlight": true,
    "spotlight_number": 5,
    "simulcast": true,
    "multistream": true,
    "video": {
        "codec_type": "VP8",
        "bit_rate": 800
    }
}

シグナリング通知

シグナリング通知の詳細は スポットライト機能のシグナリング通知 をご確認ください。

フォーカスされたタイミングとフォーカスが外れたタイミングでシグナリング通知をクライアントに送ります。 クライアントはこの通知を利用することで、配信が切り替わったことを知ることが可能になります。

イベントウェブフック

フォーカスされたタイミングとフォーカスが外れたタイミングでウェブフックが通知されます。

sora.confignore_spotlight_changed_webhook にて指定可能です。 デフォルトではイベントウェブフックでの通知は無効になっています。

API

API の詳細は スポットライト API をご確認ください。

  • 指定した参加者にスポットライトをフォーカスし続ける API

  • 指定した参加者にスポットライトをフォーカスする API

  • 指定した参加者からスポットライトのフォーカスを外す API

  • スポットライトのフォーカス数を変更する API

  • 指定した参加者の受信している映像ストリームのクオリティを変更する API

  • 指定した参加者の受信している映像ストリームのクオリティをリセットする API

デモ

デモを用意してあります、 デモ機能 を有効にしてご使用ください。

Sora がインストールされているサーバの IP アドレスをここでは仮に 192.0.2.10 としています。

Sora にこの機能のサンプルを用意しています。また、今後は SDK からこの機能を使えるようにする予定です。

Sora を起動した後に https://example.com/spotlight_sendrecv.html へ接続してみてください。

Chrome では HTTPS が必須なのですか? も合わせて参考にしてください。