マルチストリーム機能

概要

マルチストリームとは一つの PeerConnection の中で複数の映像や音声を動的に追加したり削除したりする仕組みです。 これを利用することで、複数の PeerConnection を管理せずに複数の映像や音声を使用することができるようになります。

現在は Chrome、Firefox、Safari、Edge でマルチストリームを利用することができます。

仕様

重要

マルチストリームではビットレート自動シェアリング機能がデフォルトで有効になっています。

シグナリング

マルチストリームを使用する場合は、通常のシグナリングとは異なり、ユーザが参加や離脱するたびに SDP を交換する必要があります。

"type": "connect"

{
    "type": "connect",
    "channel_id": "<チャネルID>",
    "role": "sendrecv",
    "multistream": true,
    "metadata": "<ユーザ定義データ>",
    "video": {
        "codec_type": "VP9",
        "bit_rate": 800
    }
}

"multistream": true を追加します。JavaScript 側の実装がかなり変わることになります。

ブラウザの仕様自体が変わっていっているためうまく説明することが難しいのが現状です。

"type": "update"

マルチストリームでは通常の connect/offer/answer 以外に、update を使用します。新しくクライアントが接続したり、切断した際に送られてきます。そしてクライアントからも update で返す必要があります。 "type": "update" は sdp が入っているだけのシンプルなもので、 受信したら offer と同じように処理してください。 demo 機能の multi_sendrecv.html を参考にしてください。

Sora から送られてくる "type": "update"

{
    "type": "update",
    "sdp": ".."
}

クライアントから Sora に送る "type": "update"

sdp には createAnswer で生成した SDP を入れてください。

{
    "type": "update",
    "sdp": ".."
}

マルチストリームにおける映像ビットレート自動シェアリング機能

音声のビットレートには影響しません

マルチストリームでは複数の映像を大量に受信するため、 配信側の映像ビットレートを参加している配信者全員でシェアする機能がデフォルトで有効になっています。

そのため、マルチストリームにおける video の bit_rate は通常の bit_rate とは扱いが異なります。

例えば bit_rate を 1200 と指定した場合 2 人で配信している場合はそれぞれ配信に 600kbps ずつ使用します。 ここに 1 人が追加して 3 人になると一人 400kbps ずつ使用して配信するようになります。

またここに 5 人が追加して 8 人になると、1 人 150kbps ずつ使用して配信するようになります。

配信の合計のビットレートを指定するのが video の bit_rate です。

同じチャネルに参加している人が異なる bit_rate を指定した場合

2 人が参加している状態で 1 人は映像のビットレートを 500 、もう 1 人は 1000 を指定した場合、 Soraは 500 を指定した人は配信に 250kbps を使用し、 1000 を指定した人は配信に 500kbps を使用します。

無効にする場合

無効にするのは推奨しません

sora.confmultistream_auto_sharing_video_bit_ratefalse に指定することで無効にできます。

sendrecv と sendonly と recvonly

マルチストリームでは role には sendrecvsendonlyrecvonly を指定することができます。

  • sendrecv は配信と視聴を行います

  • sendonly は配信のみを行います

  • recvonly は視聴のみを行います

sendrecv が 2 名いて、sendonly が 1 名、 recvonly が 5 名いるといった場合、 sendrecv に表示されるのは 2 名の映像で、 recvonly に表示されるのは 3 名の映像です。

upstream と downstream

upstream と downstream の role は今後廃止予定のため利用は推奨していません。

デモ

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

ここでは Sora がインストールされているドメインを example.com としています。

Sora にマルチストリームのサンプルを用意しています。Firefox と Chrome で動作が変わりますが、差分をクライアント側で吸収しています。 今後は SDK 側から意識せずにマルチストリームを使用できる仕組みを提供する予定です。

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

その後、別のタブで同様の URL を開いて、元のタブで動的に動画が追加されて表示されるかを確認してください。 また、後で開いたタブを閉じて動的に動画が消えていることを確認してみてください。