サイマルキャスト機能¶
概要¶
サイマルキャスト (Simulcast) は配信時に 1 つの RTCPeerConnection から複数種類のエンコードした映像を配信する技術です。
映像を配信する際、 Sora に対して、 1 つの RTCPeerConnection で複数種類のエンコードした映像を送信することにより、 受信者がどの映像を受信するかを選択できるようになります。
注意¶
現時点でのサイマルキャストの仕様¶
libwebrtc にハードコードされています。
https://chromium.googlesource.com/external/webrtc/+/master/media/engine/simulcast.cc#80
SDK 対応状況¶
要望はそれぞれの Discord チャンネルへお願いします
最新版の JavaScript SDK
対応済みです
最新版の iOS SDK
配信は VP8 のみ対応済みです
視聴は H.264 と VP8 に対応済みです
最新版の Android SDK
配信は VP8 のみ対応済みです
視聴は H.264 と VP8 に対応済みです
最新版の Unity SDK
配信は対応していません
視聴は H.264 と VP8 に対応済みです
視聴ブラウザの対応状況¶
視聴側は Chrome 、 Safari 、 Firefox 、Edge の最新バージョンに対応しております。
映像の優先度¶
サイマルキャストでは 1 つのクライアントから同じ映像を複数のエンコードで映像を配信することが可能です。
Sora では 1 つのクライアントから最大 3 種類のエンコードで映像を受信する仕組みが入っています。 この 3 種類の映像のそれぞれに r0 / r1 / r2 の 3 つの値を定義しています。 この値は rid (RTP Stream Identifier) と呼ばれています。
配信継続の優先度は r0 > r1 > r2 です。
例えば、回線が不安定だったりマシンの負荷が高かった場合、rid が r2 の映像の配信が最初に停止します。 さらに配信状況が悪化した場合は rid が r1 の映像の配信が停止します。 r0 の映像は必ず配信されます。
映像の種類のデフォルト¶
Sora ではサイマルキャストで配信する映像の種類にデフォルト値を設定しています。
[
{"rid": "r0", "active": true, "scaleResolutionDownBy": 4.0},
{"rid": "r1", "active": true, "scaleResolutionDownBy": 2.0},
{"rid": "r2", "active": true, "scaleResolutionDownBy": 1.0}
]
r0¶
rid が r0 の場合は通常の解像度から解像度(一辺) が 1/4 になるようなエンコードがされるように設定されています。
r1¶
rid が r1 の場合は通常の解像度から解像度(一辺) が 1/2 になるようなエンコードがされるように設定されています。
r2¶
rid が r2 の場合は通常の解像度のままエンコードがされるように設定されています。
映像のエンコーディングパラメータのカスタマイズ¶
Sora ではサイマルキャストでの映像のエンコーディングパラメータを自由に設定することができます。
sora.conf のファイルで指定することで全体のサイマルキャストのエンコーディングパラメータが指定できます
認証成功時に simulcast_encodings で払い出すことで個別にサイマルキャストのエンコーディングパラメータが指定できます
sora.conf でファイル指定¶
sora.conf にて simulcast_encodings_file
で JSON を指定してください。
simulcast_encodings_file = etc/simulcast_encodings.json
sora.conf で指定する JSON ファイルの記述方法¶
[
{"rid": "r0", "active": true, "scaleResolutionDownBy": 2.0, "maxFramerate": 5.0},
{"rid": "r1", "active": true, "scaleResolutionDownBy": 2.0, "maxFramerate": 20.0},
{"rid": "r2", "active": true, "scaleResolutionDownBy": 1.0, "maxFramerate": 30.0}
]
認証成功時に simulcast_encodings で払い出す記述方法¶
{
"allowed": true,
"simulcast_encodings": [
{"rid": "r0", "active": true, "scaleResolutionDownBy": 2.0, "maxFramerate": 5.0},
{"rid": "r1", "active": true, "scaleResolutionDownBy": 2.0, "maxFramerate": 20.0},
{"rid": "r2", "active": true, "scaleResolutionDownBy": 1.0, "maxFramerate": 30.0}
]
}
カスタマイズの設定¶
rid
rid は RTP Stream Identifier の略です
必須
string (r0 / r1 / r2)
https://www.w3.org/TR/webrtc/#dom-rtcrtpcodingparameters-rid
active
このエンコーディングパラメータを有効にします
オプション
この設定がない場合 Safari 14.0 ではエンコーディングパラメータが無効になります
boolean
https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters-active
scaleResolutionDownBy
オプション
1 以上の number (float または integer)
https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters-scaleresolutiondownby
maxBitrate
オプション
最大ビットレートを指定する
0 以上の integer
https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters-maxbitrate
maxFramerate
オプション
最大フレームレートを指定する
0 以上の number (float または integer)
https://w3c.github.io/webrtc-extensions/#dom-rtcrtpencodingparameters-maxframerate
adaptivePtime
この設定は Chrome でしか利用できません
オプション
boolean
https://w3c.github.io/webrtc-extensions/#dom-rtcrtpencodingparameters-adaptiveptime
配信側の利用方法¶
シグナリング開始時に指定が可能です。
シグナリング開始時¶
シグナリングの "type": "connect"
時に {"simulcast": true}
を指定することで、有効になります。
映像コーデックは VP8
または H264
を選択してください。
{
"type": "connect":,
"role": "sendonly",
"channel_id": "sora",
"video": {"codec_type": "VP8"},
"simulcast": true
}
マルチストリーム利用時にも利用可能です。
{
"type": "connect":,
"role": "sendonly",
"channel_id": "sora",
"video": {"codec_type": "VP8"},
"multistream": true,
"simulcast": true
}
視聴側の利用方法¶
シグナリング開始時に指定が可能です。
シグナリング開始時¶
シグナリング
"type": "connect"
時に{"simulcast": true}
を指定することで、有効になります。simulcast_rid
にはr0
/r1
/r2
が指定可能です。simulcast_rid
を指定しない場合はr0
が指定されます。 この値はsora.conf
のdefault_simulcast_rid
で変更可能です。映像コーデックは
VP8
またはH264
を選択してください。
{
"type": "connect":,
"role": "recvonly",
"channel_id": "sora",
"video": {"codec_type": "VP8"},
"simulcast": true,
"simulcast_rid": "r2"
}
マルチストリーム利用時にも指定可能です。
{
"type": "connect":,
"role": "recvonly",
"channel_id": "sora",
"video": {"codec_type": "VP8"},
"multistream": true,
"simulcast": true,
"simulcast_rid": "r2"
}
視聴側のストリームの変更 API¶
詳細は サイマルキャスト API をご確認ください