# FAQ

ここでは WebRTC SFU Sora に関するよくある質問についてまとめています。

## WebRTC 全般

### 片方向配信には対応していますか？

対応しています。 2022 年 12 月 の時点で 1 チャネルあたり最大 1000 視聴者までの配信を推奨しています。

1 チャネルで 1000 より多い視聴者に配信を行いたい場合は sora at shiguredo.jp またはサポートまでお問い合わせ下さい。

### 双方向配信には対応していますか？

対応しています。WebRTC のマルチストリームという技術を利用して実現しています。

2022 年 12 月 の時点で 1 チャネルに参加するクライアントは 12 までを推奨としています。

1 チャネルで 12 より多いクライアントで双方向の配信を行いたい場合は [スポットライト機能](SPOTLIGHT.html) を検討するかサポートまでお問い合わせ下さい。

### 音声検出による映像の切り替えには対応していますか？

対応しています。Sora 独自にスポットライト機能という名前で提供しています。

この機能は多人数で会議を行う場合に、クライアントやサーバーの負荷を減らせる技術です。

100 名以上が 1 チャネルに参加することが可能です。

詳細は [スポットライト機能](SPOTLIGHT.html) をご確認ください

### スクリーンキャプチャ機能には対応していますか？

2022 年 12 月 の時点でスクリーンキャプチャ機能はブラウザでは Chrome と Firefox と Safari と Edge が対応しています。
getDisplayMedia を利用することで可能になります。

[MediaDevices.getDisplayMedia() - Web APIs | MDN](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia)

### マルチストリームには対応していますか？

対応しています。ブラウザでは Chrome と Firefox と Safari と Edge で対応しています。

また、すべての SDK が対応しています。

### マルチトラックには対応していますか？

いいえ。 Sora は 1 メディアストリームにつき 1 音声トラック、1 映像トラックまでしか対応していません。

マルチトラックへの対応は今のところ未定です。

### 複数の音声や映像を 1 つのコネクションを利用して送ることは可能ですか？

いいえ。 1 つのコネクションから複数ストリームを配信をすることはできません。

1 接続では 1 ストリーム (1 音声/1 映像)の配信のみが可能です。

複数の配信を行いたい場合はマルチストリームの sendonly ロールを利用して複数接続してください。

### 1 ユーザーで送受信と送信のみを利用している場合、送受信側で送信のみの音声や映像を受信しないことは可能ですか？

はい、可能です。接続時、または認証成功時に [bundle_id](SIGNALING.html#b23b22) で同じ値を指定してください。

> **注釈**
>
> 接続時の場合は `sora.conf` の [signaling_bundle_id](SORA_CONF.html#279311) を `true` にする必要があります。

`bundle_id` が同じ接続では送信のみの音声と映像を送受信側で受信しなくなります。

### 映像コーデックは何がお勧めですか？

すべてのブラウザ、さらにほぼすべての端末で動作する VP8 がお勧めです。

ただし、端末に VP8 のハードウェアアクセラレータが搭載されていることはほとんどないため、
H.264 を採用した方が電池消費量は減ります。

一方で、H.264 は一部の Android 端末で正常に動作しないことがあります。

すべての環境が Chrome や Edge に統一できる場合は VP9 をお勧めします。

### H.264 や VP9 での映像配信に対応していますか？

ブラウザがそれぞれのコーデックに対応していれば、 Sora は問題なく配信できます。

2022 年 12 月 の時点では ...

- Chrome M107 は VP8, VP9, AV1, H.264 に対応しています
- Firefox 107 は VP8, VP9, H.264 に対応しています
- Edge 107 は VP8, VP9, H.264 に対応しています
- Safari 16.1 は VP8, VP9, H.264 に対応しています- Safari 14 から実験的機能として H.265 対応が追加されています

Sora は配信者がコーデックを選択できる仕組みを採用しています。

詳細は [シグナリング](SIGNALING.html) をご確認ください

### Safari は WebRTC に対応していますか？

はい。 Safari 12 で WebRTC に対応しました。

詳細は [Apple Safari の WebRTC について](SAFARI.html) をご確認ください。


### Chrome や Edge では HTTPS が必須ですか？

はい。ローカルホスト以外からのアクセスでブラウザで getUserMedia を使用する場合は HTTPS が必須になります。

もし、開発中に HTTP でアクセスしたい場合は、以下を参考にしてください。

[http でのアクセスでカメラの映像を取得する - Qiita](https://qiita.com/Hexa/items/a5e5c3e06ba2a3e6bb41)

### Safari では HTTPS が必須ですか？

はい。ただし、 開発者メニューから HTTP でも getUserMedia を使用できるようにするオプションが用意されています。

### Edge は WebRTC に対応していますか？

はい。 Chrome とほぼ同等のレベルで WebRTC が利用できます。

詳細は [Microsoft Edge の WebRTC について](EDGE.html) をご確認ください。

### サーバー側からクライアントごとにコーデックやビットレートを指定できますか？

可能です。 Sora からクライアントに送信する Offer に含める SDP を、クライアントごとに変更することが可能です。

詳細については [認証ウェブフック成功時の払い出し](AUTH_WEBHOOK_RETURN.html#e2119f) をご確認ください。

### コーデックが異なるクライアントでも同じチャネルで双方向通信は可能ですか？

可能です。マルチストリームを利用することで接続ごとにコーデックを指定できます。

例えば、iOS の Safari は H.264 で、デスクトップの Chrome は VP8 という場合でも同じチャネルで双方向通信が可能です。

ただし、ブラウザが非対応の場合はもちろん送受信できませんのでご注意ください。

### Firefox で複数タブで音声デバイスを利用できますか？

いいえ。 Firefox 56 から複数タブで音声デバイスを利用することができなくなりました。

### Safari で音声が有効な場合、自動で視聴を開始できますか？

いいえ。 Safari の仕様で、音声が含まれている映像を自動で再生することはできません。

### 高いビットレートで配信することは可能ですか？

Sora では最大 50Mbps での配信を可能としていますが、
今のところは 15Mbps より大きなビットレートでの配信はサポート対象外とさせていただいています。

配信自体は可能ですが、クライアント、サーバーともに不安定になることがあるためです。

今後、高いビットレートでの配信を安定して実現できるようにしていく予定です。

### 4K 30fps を実現したいのですが可能ですか？

可能です。ただしクライアント側の負荷がとても高くなります。

4K 30fps を配信するためにはソフトウェアエンコードでの配信はほぼ不可能です。
そのため 4K 30fps に対応したハードウェアエンコーダーが必要になります。

時雨堂では [WebRTC Native Client Momo](https://momo.shiguredo.jp/) という、
様々なハードウェアエンコーダーに対応したクライアントをオープンソースで公開していますので、是非試してみてください。

[shiguredo/momo: WebRTC Native Client Momo](https://github.com/shiguredo/momo)

### 映像をフレームレート 60 や 120 で配信することは可能ですか？

Sora は映像のフレームレートには関与しません。

フレームレートはカメラが対応していること、また、クライアントが対応していることが必要になります。

### カメラで指定した解像度より低い解像度で配信されるのですが？

カメラ映像の解像度と WebRTC でエンコードされて配信される解像度は一致しません。

カメラから入ってくる映像を WebRTC では圧縮して配信します。WebRTC は圧縮時に CPU 使用率が高い、ネットワーク帯域不足などの状況に応じ、自動で解像度やフレームレートを落として配信できる状態にして配信します。

### WebRTC DataChannel には対応していますか？

対応しています。

2022 年 12 月 の時点では、シグナリング機能とメッセージング機能として DataChannel を利用することが可能です。

詳細は [DataChannel 経由のシグナリング](DATA_CHANNEL_SIGNALING.html) や [メッセージング機能](MESSAGING.html) をご確認ください。

### 音声のステレオには対応していますか？

対応しています。

ただしステレオで音声をエンコード/デコードするかどうかはクライアント側に依存します。

例えばブラウザの場合はデフォルトでステレオに対応していますが、エコーキャンセルが有効な場合はステレオは利用できません。
エコーキャンセルを無効にすることでステレオが利用できるようになります。

エコーキャンセルの設定は以下を参考にしてください。

[Media Capture and Streams](https://www.w3.org/TR/mediacapture-streams/#dom-mediatracksupportedconstraints-echocancellation)

## シグナリング

### シグナリングは独自仕様ですか？

独自仕様です。

WebRTC の規格ではシグナリング部分は定義されていないため、 WebRTC で利用されるシグナリングは独自仕様が前提になります。

Sora は `JSON over WebSocket` または `JSON over DataChannel` をシグナリングの仕様として採用しています。

Sora の SDK を利用すればシグナリングを意識する必要がありません。

Sora のシグナリングの詳細な仕様について確認したい場合は、[シグナリング](SIGNALING.html) をご確認ください。

### シグナリングに WebSocket (WS) ではなく WebSocket over TLS (WSS) を使うことは可能ですか？

getUserMedia を使用する場合、 ローカルホスト以外のアクセスは WSS を必須としています。
ただし、Sora は WS のみに対応しています。

これは、実運用を考慮して、前段にリバースプロキシサーバーを立てていることを前提としており、
リバースプロキシサーバーで TLS を終端する構成を想定しているためです。

そのため、もし WSS を使う場合は、
nginx などのリバースプロキシサーバーを使用して TLS を終端してください。

> **注意**
>
> nginx の設定などについてはサポート対象外となりますので、お問い合わせはご遠慮ください

弊社では、TLS を終端するリバースプロキシサーバーには nginx の使用を推奨しています。

詳細については [nginx](NGINX.html) をご確認ください。

### クライアント単位で接続時間を知ることは可能ですか？

可能です。Sora は接続ごとにタイマーを保持しており、
接続後 1 分ごとに外部のアプリケーションサーバーに HTTP 経由で接続の状態を報告します。

この報告はクライアントごとに独立しており、報告にはクライアント ID やチャネル ID やアプリケーションサーバーが認証時に指定した event_metadata が含まれています。
これらの情報を使用して、例えば、ユーザーごとに接続から 10 分経過したら切断する等の処理が簡単に行えます。

### シグナリングで利用している WebSocket や DataChannel を使ってクライアントにメッセージ送ることは可能ですか？

可能です。 [プッシュ API](API.html#561ac3) を利用することでシグナリングで利用している WebSocket や DataChannel 経由でクライアントにメッセージを送ることが可能です。

または [メッセージング機能](MESSAGING.html) を利用してクライアント間でメッセージがやりとり可能です。

### クライアントがシグナリング経由で他の人の接続を通知で受け取ることは可能ですか？

同一チャネルのみに限りますが可能です。

[シグナリング通知](SIGNALING_NOTIFY.html) をご確認ください。

### シグナリングに DataChannel を使うことは可能ですか？

可能です。ただし、WebRTC 接続確立までは必ず WebSocket を利用する必要があります。

詳細は [DataChannel 経由のシグナリング](DATA_CHANNEL_SIGNALING.html) をご確認ください。

## 認証

### シグナリング時の認証は可能ですか？

可能です。ただし、Sora 自体は認証機能を持っていません。
Sora のシグナリング開始時に任意の情報をクライアントに送ることができる `metadata` を指定することが可能です。
これは外部のアプリケーションサーバー側で払い出して使用することができます。

認証のフローを以下に簡単に書き出しておきます。

1. 外部のアプリケーションサーバーでアクセストークンをクライアントに払い出す
2. そのアクセストークンを `metadata` に入れて Sora に接続する
3. Sora はそのアクセストークンやコネクション ID を外部のアプリケーションサーバーに HTTP 経由で問い合わせる
4. 外部のアプリケーションサーバーはそのアクセストークンが正しいことを確認し、 `{"allowed": true}` を HTTP ステータスコード 200 番台で Sora に返す
5. Sora は Offer をクライアントに送る

外部の HTTP サーバーに対して問い合わせを行い、 `{"allowed": true}` と HTTP ステータスコード 200 番台 が返ってきたら認証を許可します。

詳細は [認証ウェブフック](AUTH_WEBHOOK.html) をご確認ください

### シグナリングの認証失敗時に失敗の理由をクライアントに返せますか？

可能です。外部のアプリケーションサーバーで Sora への認証ウェブフックの戻り値を返す場合、
`{"allowed": false, "reason": "最大 100 バイトまでの文字列"}` という値を返す必要があります。

この `reason` 部分はクライアントに通知されます。

詳細は [認証ウェブフック](AUTH_WEBHOOK.html) をご確認ください

## 通知

### チャネルに参加中のクライアントが、別のクライアントの参加や離脱を知ることは可能ですか？

可能です。シグナリング通知機能を利用することにより、接続や切断のタイミングで、
シグナリングで利用している WebSocket または DataChannel 経由で通知されます。

詳細は [シグナリング通知](SIGNALING_NOTIFY.html) をご確認ください。

### チャネルに参加中のクライアントが、自分の録画開始/終了を知ることは可能ですか？

可能です。シグナリング通知機能を利用することにより、録画の開始や終了のタイミングで、
シグナリングで利用している WebSocket または DataChannel 経由で通知されます。

詳細は [シグナリング通知](SIGNALING_NOTIFY.html) をご確認ください。

### 参加者に Sora 側で変更可能なメタデータをもたせることは可能ですか？

可能です。シグナリング通知メタデータ拡張機能を利用することで、
接続や切断のタイミングで API 経由で変更したメタデータを通知できます。
さらにメタデータの変更時に参加者全員にプッシュで通知することも可能です。

詳細は [シグナリング通知メタデータ拡張](SIGNALING_NOTIFY_METADATA_EXT.html) をご確認ください。

## API

### 指定したコネクションのみを切断することは可能ですか？

可能です。 Sora はチャネル ID とコネクション ID を指定して接続を切断することができます。

詳細は [DisconnectConnection](API.html#2ec3a0) をご確認ください。

### 指定したコネクションを切断した際に切断理由を含めることは可能ですか？

可能です。 `reason` を指定することで、イベントウェブフック `connection.destroyed` の `disconnect_api_reason` として指定した値が入ってきます。

詳細は [DisconnectConnection](API.html#2ec3a0) をご確認ください。

### 指定したクライアントのみを切断することは可能ですか？

可能です。 Sora はチャネル ID とクライアント ID を指定して接続を切断することができます。

詳細は [DisconnectClient](API.html#e91c0b) をご確認ください。

### 指定したチャネルの配信者や視聴者のみを切断することは可能ですか？

可能です。 Sora はチャネル ID を指定して配信者や視聴者のみを接続を切断することができます。

詳細は [DisconnectChannelByRole](API.html#39de6a) をご確認ください。

### 指定した配信者の映像を、指定した視聴者が受信しないことは可能ですか？

可能です。Sora は配信者、視聴者のコネクション ID を指定して映像を Sora で一時的に止めることができます。

詳細は [PauseRtpStream](EXPERIMENTAL_API.html#de7a52) をご確認ください。

## 録画

### Sora で録画した場合に出力されるファイルの形式は何ですか？

WebM 形式です。

- [The WebM Project | Welcome to the WebM Project](https://www.webmproject.org/)
- [WebM - Wikipedia](https://ja.wikipedia.org/wiki/WebM)

### Sora で録画した複数の WebM 形式のファイルを一つのファイルに出力することは可能ですか？

サポートの範囲外になりますが可能です。 録画ファイル合成ツールをオープンソースとして公開しています。

[Recording Composition Tool Hisui](https://github.com/shiguredo/hisui)

### 録画した WebM 形式のファイルはブラウザで閲覧できますか？

可能です。Chrome と Firefox、Edge で閲覧することができます。
Safari では WebM 形式のファイルの閲覧に対応はしていますが VP9/Opus のファイルのみに対応しています。

> **警告**
>
> iOS 15.1 の Safari では WebM 形式を正常に読み込むことができません。
> これは Safari 側のバグのようで、対応待ちです。

### 録画可能なコーデックは何ですか？

VP8 と Opus 、VP9 と Opus、AV1 と Opus、または H.264 と Opus の組み合わせに対応しており、 WebM 形式で保存されます。

H.265 の録画には現時点で対応していません。

### 音声のみを録音できますか？

可能です。Opus コーデックで音声のみの録音が可能になります。

webma ファイルではなく webm ファイルで出力されますのでご注意ください。

### 録画した WebM のサイズの例を教えてください

基本的には指定したビットレートで決まります。

例として、VP8 と Opus の組み合わせの WebM で、
VP8 の解像度が 640x480 でビットレートが 300kbps 程度、音声ありの場合、 1 分の映像で約 2.5 M バイトです。

### 録画が終了するタイミングを教えて下さい

録画終了するタイミングは 3 つあります。

1. [StopRecording](API.html#fd0de5) API が呼ばれた場合
2. 接続が切断した場合
3. 録画開始時に指定した期限が来た場合

### 録画の開始と終了をクライアントへ通知することはできますか？

可能です。

シグナリング通知で `recording.started` と `recording.stopped` が送られます。

### サイマルキャスト機能を利用した場合に録画は可能ですか？

可能です。映像の優先度が一番低い映像を録画します。

映像の優先度については [映像の優先度](SIMULCAST.html#36c708) をご確認下さい。

### スポットライト機能を利用した場合に録画は可能ですか？

可能です。映像の優先度が一番低い映像を録画します。

映像の優先度については [映像の優先度](SIMULCAST.html#36c708) をご確認下さい。

### 録画関連ファイルをアップロードする仕組みはありますか？

サポートの範囲外になりますが可能です。

Sora が出力した録画関連ファイルを、
Amazon S3 や S3 互換オブジェクトストレージにアップロードするツールをオープンソースとしてとして公開しています。

[Sora Archive Uploader](https://github.com/shiguredo/sora-archive-uploader)

### replaceTrack(null) を使うと、再生時に音声と映像がずれてしまいます

Chrome には、特定の条件で RTP タイムスタンプが正しく進まないという問題があり、
そのため Sora が生成する WebM ファイルの再生時に音声と映像がずれてしまうことがあります。

発生条件は、音声ストリームに対して RTCRtpSender.replaceTrack(null)

を実行した後に RTCRtpSender.replaceTrack(audioTrack) した場合です。
この問題は Chrome/WebRTC のバグトラッカー  で
管理されています。

### 録画時のキーフレーム要求間隔は何秒ですか？

録画機能利用時の Sora からのキーフレーム要求間隔は 20 秒です。

## TURN

### TURN サーバーを立てる必要はありますか？

Sora は TURN 機能を組み込んでありますので TURN サーバーを立てる必要はありません。
また、Sora とは別に TURN サーバーを立てることは推奨していません。

### Sora の組み込み TURN サーバーは TURN-TCP や TURN-TLS に対応していますか？

対応しています。ただし、TURN-TLS 機能を使用するためには nginx が必要となります。

- TURN-UDP- ポート変動
- TURN-TCP- ポート固定
- TURN-TLS- ポート固定
  - nginx 必須

詳細は [TURN 機能](TURN.html) をご確認ください

### HTTPS で利用される 443 番のポートを TURN 機能で利用することはできますか？

nginx の利用が必須ですが、可能です。
詳細は [TURN-TLS、TURN-TCP、シグナリングで 443 番ポートを使用する](PRODUCTION.html#14258d) をご確認ください。

> **注意**
>
> nginx の設定などについてはサポート対象外となりますので、お問い合わせはご遠慮ください

### Sora を使った場合、TURN サーバーで使用するユーザー名やクレデンシャルはどう払い出せば良いですか？

いくつか方法がありますが、ここでは Sora の認証機能と合わせて使用する方法をご紹介します。

Sora は認証を外部のアプリケーションサーバーに問い合わせます。この問い合わせの戻り値の JSON に metadata を含むことができます。
その戻された JSON の metadata はそのままクライアントまで払い出されます。

これを利用して、認証に成功した場合にのみ TURN の認証に使用するユーザー名とクレデンシャルを払い出すことが可能になります。

認証時のクライアントへの metadata の払い出しについての詳細は [metadata の払い出し](AUTH_WEBHOOK_RETURN.html#57f62c) をご確認ください。

### TURN IPv6 に対応していますか？

対応しています。

### TURN の FQDN 設定はどのようなときに設定が必要ですか？

NAT64/DNS64 ネットワーク環境に対しては TURN の FQDN を設定する必要があります。

## ウェブフック

### ウェブフックのリクエスト送信先は複数登録することができますか？

できません。

もし、送信先を複数にしたい場合は、登録した送信先のアプリケーションサーバーなどで対応をお願いします。

### ウェブフックにベーシック認証は利用できますか？

できます。

`sora.conf` にて [webhook_basic_authn](SORA_CONF.html#081a9f) の設定を有効にして下さい。

詳細については [ウェブフックリクエスト送信先のサーバーがベーシック認証を利用している場合](SESSION_WEBHOOK.html#2a13ea) をご確認ください。

### ウェブフックのタイムアウト値を設定できますか？

できます。

`sora.conf` にて [webhook_response_timeout](SORA_CONF.html#e81d13) を設定することで、ウェブフックのレスポンスのタイムアウトが変更可能です。

### イベントウェブフックの connection.updated の戻り値を使用して切断などはできますか？

できません。切断をする場合は Sora が持つ切断 API を使用してください。

### イベントウェブフックの connection.updated を送らない設定はできますか？

できます。 `sora.conf` にて [ignore_connection_updated_webhook](SORA_CONF.html#f3f12a) を `true` を設定することで、
connection.updated のイベントウェブフックリクエストが送信されなくなります。

### イベントウェブフックのワーカー数を変更することはできますか？

できます。同時接続数が増えた場合や、ウェブフックリクエスト送信先のサーバーの応答速度が遅い場合は、
`sora.conf` にて [event_webhook_worker_number](SORA_CONF.html#58523d) の値を変更してください。

イベントウェブフックのワーカー割り当てに利用している値は `channel_id` となります。
ワーカーが 10 の場合、 `channel_id` が 100 利用している場合、1 ワーカーに 10 の `channel_id` が割り当てられます。

### イベントウェブフックの処理が遅くなった場合の挙動はどうなりますか？

イベントウェブフックワーカーがキューを持っており、もしそのワーカーがリクエストを処理中の場合、キューに追加されます。
そのリクエストの処理が終わりったらキューから取り出され処理されます。

## DataChannel

### DataChannel でメッセージを送ることはできますか？

できます。 Sora のメッセージング機能は DataChannel を利用しています。

詳細については [メッセージング機能](MESSAGING.html) をご確認ください。

### DataChannel でクライアントが `RTCPeerConnection.createDataChannel()` を利用することはできますか？

できません。Sora 側で用意された DataChannel を利用してください。

### role が recvonly で受信のみでもメッセージング機能を利用してメッセージを送ることはできますか？

できます。メッセージングが送ることができるかどうかは `direction` にのみ影響を受けます。

## クラスター機能

### クラスターには対応していますか？

対応しています。現在 1 クラスター最大 10 ノードまで対応しています。

詳細については [クラスター機能](CLUSTER.html) をご確認ください。

### クラスター構築時に同一のライセンスを使う方法はありますか？

あります。通常はライセンスを複数のノードで利用することはできませんが [最大ノード数ライセンス](LICENSE.html#aee259) を利用することで可能になります。

### ロードバランスには対応していますか？

対応しています。

クラスター機能の一つとして、新規チャネルの接続は接続割合が少ない Sora ノードに割り振ります。

### クラスターへの自動参加には対応していますか？

対応しています。

`sora.conf` の `contact_node_name_list` に書かれている Sora ノードに自動で参加を試みます。

### クラスターの自動復旧には対応していますか？

対応しています。

ネットワーク障害やノード障害により、クラスターから離脱した場合 Sora は再度クラスターへの参加を自動で試みます。

### ノード間通信は暗号化されていますか？

されていません。そのためプライベートネットワークまたは暗号化されたネットワークを利用してください。

### 2 ノードでもクラスターを構築できますか？

可能です。Sora は 1+1 の 2 ノードでのクラスター機能を構築できます。

ただしどちらかのノードに障害が発生した場合には、クラスター全体が止まってしまうため、
可用性は 1 ノードの場合よりも低くなります。

そのため 3 ノード以上でクラスターを組むことをお勧めします。

### クラスターからノードを離脱させたい場合はどうすれば良いですか？

Sora を終了することで離脱を行います。丁寧に離脱したい場合はモード切替で [新規コネクションブロックモード](MODE.html#0b67d3) を指定し、
すべての接続を切断してから終了してください。

もしそのノードが今後もクラスターに参加しない場合、
[PurgeClusterNode](EXPERIMENTAL_API.html#13b35a) API を利用してクラスターからそのノードの情報を完全消去してください。

なおノード情報を完全消去せずに、一度に過半数以上のノードを離脱させてしまうと、
残ったノードも接続を処理できなくなってしまうので注意が必要です。
詳細については [通信できるノードが過半数未満となった場合の挙動](CLUSTER.html#2ccf66) をご確認ください。

### クラスターのディザスタリカバリーには対応していますか？

対応していません。今後対応予定はありますが、リリース時期は未定です。

### クラスターのインターコネクトには対応していますか？

対応していません。今後対応予定はありますが、リリース時期は未定です。

### クラスターの最大ノード数はいくつですか？

クラスターを構築するノードの最大数は 10 を想定しています。
これ以上のノード数でのクラスター構築を検討されている場合はサポートまでご連絡ください。

## その他

### IP アドレスは複数指定できますか？

可能ですが、運用が複雑になるため、現時点ではドキュメントには記載していません。
もし、IP アドレスの複数指定を利用したい場合は、サポートまでお問い合わせください。

基本的には、クライアントごとに IP アドレスを変更したい場合は、認証時の戻り値を使用してください。

### 配信者は音声と映像を配信し、視聴者は音声のみを受信することは可能ですか？

可能です。視聴者は配信者からの映像や音声のどちらかだけを受け取るよう指定できます。

詳細は [視聴メディアの選択](SIGNALING.html#ca3d9c) をご確認ください。

### 複数のユーザーの中で、発言していないユーザーは低画質な映像のみを配信し、発言しているユーザーは音声と高画質な映像を配信することは可能ですか？

スポットライト機能を利用すれば可能です。

詳細は [スポットライト機能](SPOTLIGHT.html) をご確認ください

### サイマルキャストに対応していますか？

対応しています。ブラウザは Chrome と Edge と Safari の最新バージョンに対応しています。
それ以外のブラウザでは配信はできませんが、視聴は可能です。

映像コーデックは VP8 と H.264 に対応しています。

> **注釈**
>
> VP8 と H.264 両方のコーデックが利用できる場合、VP8 が比較的安定しています。

### 映像や音声を WebRTC 以外で出力する仕組みはありますか？

[StartForwardingRtp](EXPERIMENTAL_API.html#c734b8) API と [StopForwardingRtp](EXPERIMENTAL_API.html#729828) API を利用することで、
外部のサーバーに対して WebRTC の DTLS (暗号部分) を除いた RTP パケットを送ることが可能です。

FFmpeg などを使用することで、 RTP から HLS や MPEG-DASH などに変換することもできます。

### 映像の配信を一時的に止める仕組みはありますか？

[PauseRtpStream](EXPERIMENTAL_API.html#de7a52) API と [ResumeRtpStream](EXPERIMENTAL_API.html#43002a) API を利用することで、
指定した接続からの映像の配信を一時的に停止できます。

### HLS 配信はできますか？

Sora 単体ではできません。ただし、Sora の [RTP 転送 API](EXPERIMENTAL_API.html#726b29) を利用して FFmpeg などに転送することで、HLS での配信が可能です。

**こちらのドキュメントは古いため参考程度にお願いします**

[HLS 配信](HLS.html) をご確認ください。

実際に Sora を利用した HLS での配信サービスをさくらインターネット様が提供されていますのでこちらの利用をおすすめします。

[ライブ配信サービス ImageFlux Live Streaming｜さくらインターネット](https://www.sakura.ad.jp/services/imageflux/livestreaming/)

### 追いかけ再生はできますか？

Sora 単体ではできません。

ただし、Sora の [RTP 転送 API](EXPERIMENTAL_API.html#726b29) を利用して FFmpeg などに転送することで、HLS での配信が可能です。
そのため、この HLS での配信を利用することで追いかけ再生を実現できます。

**こちらのドキュメントは古いため参考程度にお願いします**

[HLS 配信](HLS.html) をご確認ください。

### WebRTC 確立するまでにかかる時間は知ることができますか？

[GetStatsReport](EXPERIMENTAL_API.html#bbbfca) API の `average_setup_time_msec` でシグナリング接続開始から WebRTC 接続が確立するまでにかかった平均時間が取得できます。

## 性能

### 負荷試験はどう行えばよいですか？

サポートの範囲外になりますが、Sora 専用の負荷試験ツールをオープンソースとして公開しています。

[WebRTC Load Testing Tool Zakuro](https://github.com/shiguredo/zakuro)

### Sora は CPU をどの程度使用しますか？

> **重要**
>
> WebRTC では全ての通信が暗号化されているため、暗号化/復号処理で最も CPU リソースを消費します

通信環境やビットレートに影響するため一概には言えませんが、参考値を紹介します。

環境は AWS の C5n.4xlarge を利用しています。

以下の CPU の % は 1 コアを 100% とした場合です。

解像度が QVGA / 20fps / 1000kbps の映像と音声の送受信で 1 チャネル 8 クライアントを 12 ルーム (96 接続) で CPU 使用率を 200 % 程度利用します。

### Sora はメモリをどの程度使用しますか？

Sora は再送のキャッシュ用途にメモリを使用します。 100 接続であれば 4 GB 以上あれば十分です。

また、録画利用時にはフレーム組み立てのため一時的にメモリを使用します。こちらはビットレートに依存します。

### Sora はディスクをどの程度使用しますか？

主に録画したファイルとログによりディスクが使用されます。

録画する映像の容量はコーデックやビットレートに依存するため一概には言えません。

### マルチストリームは 1 チャネルで最大何クライアントまで対応していますか？

2022.2.0 時点で最大 12 クライアントまで対応しています。それ以上を接続することもできますが、お勧めはできません。

もし、大規模での会議を行いたい場合は、現在実験的機能として提供中の [スポットライト機能](SPOTLIGHT.html) の利用を検討してください。

## 運用

### WebSocket が通らないプロキシ環境がある場合はどうしたらよいですか？

WebSocket は TLS を利用しているため、おそらくプロキシは TLS を一度終端するタイプかと思われます。

接続に対して中身の解析を行うプロキシであれば、
WebSocket だけでなく、TURN-UDP や TURN-TCP、TURN-TLS も通らない可能性が高いです。

結果として WebSocket が通らないプロキシを利用している場合は WebRTC 自体が利用できない可能性が高いため、プロキシの設定を変更してもらう以外の方法はありません。

### Sora は Prometheus 形式に対応した監視情報を出力しますか？

Sora 自体は Prometheus 形式の監視情報は出力しません。

その代わりにオープンソースとして Sora exporter を公開しています。

[Prometheus exporter for WebRTC SFU Sora metrics.](https://github.com/shiguredo/sora_exporter)

### Sora をデーモン化せずに起動することは可能ですか？

可能です。

Sora を起動する際、 `bin/sora foreground` で起動してください。

### Sora を systemd で利用することは可能ですか？

可能です。

詳細は [systemd](SYSTEMD.html) をご確認ください。

### Sora クラスターを利用せず、ロードバランサーを利用することは可能ですか？

できません。

Sora ではかならず同一チャネルの接続を同一 Sora に集約する必要があるためです。
もしロードバランサーを利用したい場合はクラスターを構築する必要があります。

### Sora クラスターを利用して、ロードバランサーを利用する事は可能ですか？

可能です。

ロードバランサーは WebSocket に対応している必要があります。
さらにロードバランサー側では 30 秒以上のタイムアウトを設定する必要があります。
これは Sora は WebSocket と DataChannel をシグナリングに併用した場合 30 秒間隔で Ping を Sora から送るためです。

また、ロードバランサーを経由しないシグナリング接続もできるようにする必要があります。
これは Sora 側でシグナリングのリダイレクトを行い別の Sora に直接接続させる仕組みがあるためです。

### Sora は Docker 上で利用できますか？

Sora をコンテナで運用するのは推奨していませんが、技術的には可能です。
サポートへ問い合わせする場合はコンテナに関係する問題を切り分けをして頂く必要があります。

### Sora の WebSocket を利用したシグナリングのキープアライブの切断条件は何ですか？

Sora は WebSocket 経由で 5 秒間隔で `"type": "ping"` を送信し、
60 秒間で 1 回も `"type": "pong"` が返って来こなかった場合、
Sora はシグナリング接続を切断します。

### Sora の DataChannel を利用したシグナリングの Sora 側からの切断条件は何ですか？

Sora は定期的に接続状態を確認する仕組みを持っており、その仕組みで切断かどうかを判断しています。

詳細は [ICE コネクションステート](ICE_CONNECTION_STATE.html) をご確認ください。

### Sora 1 台のサーバーでは最大同時接続数はいくつですか？

現状 1 台では 1000 接続までを推奨していますが、
サーバーのスペックが高ければ 1 台で 3000 同時接続なども可能です。

1000 以上の接続を 1 台で行いたい場合は sora at shiguredo.jp またはサポートまでお問い合わせ下さい。

### Sora が対応している OS は何ですか？

2022.2.0 の時点では以下の OS に対応しています。

- Ubuntu 22.04 LTS x86_64
- Ubuntu 20.04 LTS x86_64
- Ubuntu 18.04 LTS x86_64- 新規でのお客様向けには提供は行っておらず、既存のお客様向けにのみ提供しています
  - 2023 年 4 月にサポートの提供を終了するため、非推奨としています
- Red Hat Enterprise Linux 9 x86_64
- Red Hat Enterprise Linux 8 x86_64
- CentOS 7 x86_64- 新規でのお客様向けには提供は行っておらず、既存のお客様向けにのみ提供しています
  - カーネルが古く Sora の性能が引き出せないため、非推奨としています
- Ubuntu 22.04 LTS arm64
- Ubuntu 20.04 LTS arm64

> **重要**
>
> arm64 版は 3 ヶ月以上、 200 同時接続以上のライセンスをご契約頂いているお客様にのみ提供しています。

### Sora は Amazon Linux に対応していますか？

対応していません。

Sora が対応していると明記している OS 以外で動作させている場合は Sora はサポート対象外となります。

### Sora のプロセス名は何になりますか？

`bin/sora daemon` で起動した場合、Sora 本体は run_erl というプロセスになります。こちらの死活監視をお願いします。

### Sora を終了しても epmd というプロセスが残りますが問題ありませんか？

問題ありません。 Sora と関係するプロセスですが独立しており、起動し続けていて構いません。

### カーネルパラメータの設定は何をすれば良いですか？

まずはファイルディスクリプタ数をご確認ください。値は 65535 に設定しておくことをお勧めします。

その他のチューニング項目については [Linux カーネルチューニング](LINUX_KERNEL_TUNING.html) をご確認ください。

### ログローテーションはどうすれば良いですか？

sora.log と connection.log はローテションされませんので必要な部分で mv コマンドなどで移動してください。
ファイルが無い場合、新しく作られます。

erlang.log については自動でログローテーションを行いますので気にする必要はありません。

ログの詳細については [ログファイル](LOG.html) をご確認ください。

### ログのタイムゾーンを教えてください

UTC です。

### Sora が使用する UDP のポート範囲を教えてください

Sora が使用する UDP ポートは Linux のエフェメラルポートを使用しています。

エフェメラルポートの範囲は sysctl などで確認してください。

実行例:

```
$ sysctl -n net.ipv4.ip_local_port_range
32768 60999
```

### Sora が使用する UDP のポート範囲を制限できますか？

可能です。Sora が使用する UDP ポートの範囲はエフェメラルポートの範囲です。
Linux 側でエフェメラルポートの範囲を設定してください。

sysctl にて net.ipv4.ip_local_port_range の範囲を指定してください。

### ブラウザで WebRTC の詳細情報を取得することはできますか？

はい、可能です。

- Chrome であれば URL に `chrome://webrtc-internals` を入力してみてください
- Firefox であれば URL に `about:webrtc` を入力してみてください
- Edge であれば URL に `edge://webrtc-internals` を入力してみてください
- Safari であれば JavaScript コンソールの設定の一般から WebRTC を設定可能です

![image](https://i.gyazo.com/cbcc400253e213c4d5e311377ea5a613.png)

### SELinux を利用する際の注意点はありますか？

Sora の log ディレクトリ以下にログを書き込めるようにする必要があります。

以下を参考にしてみてください。

- [logging - logrotate cron job not rotating certain logs - Stack Overflow](https://stackoverflow.com/questions/15652654/logrotate-cron-job-not-rotating-certain-logs)
- [linux - Configuring SELINUX to allow logging to a file that's outside /var/log - Unix & Linux Stack Exchange](https://unix.stackexchange.com/questions/79311/configuring-selinux-to-allow-logging-to-a-file-thats-outside-var-log)

### 映像が乱れたり止まったりする場合は何を確認するのが良いですか？

映像が乱れたり止まったりする場合はネットワーク回線が不安定なことがほとんどです。

この場合は切断時に生成される connection.log を確認してみてください。

このログで映像の送信側と受信側の統計情報が確認できますので、映像が乱れたり止まったりした接続の connection_id を記録しておいて下さい。

- total_received_rtcp_rtpfb_generic_nack
- total_sent_rtcp_rtpfb_generic_nack

この値が多ければ多いほど「再送要求」の回数が多く、回線が不安定だったことが把握できます。

connection.log の詳細については [connection ログ](LOG.html#f2e264) をご確認ください。

### Sora が突然終了しました

Sora は何か問題があり Sora が終了した場合 `erl_crash.dump` というログを出力します。
このログが出力された場合はサポート問い合わせの手順に従ってサポートまでご連絡ください。

もし `erl_crash.dump` が出力されずに Sora が終了した場合はカーネル側から停止された可能性があります。
まずは OOM Killer で殺されていないかどうかを確認してみてください。

## SDK

Sora の SDK は基本的にシグナリング処理のための SDK です。
WebRTC 部分は webrtc.org が提供しているライブラリを利用しています。

### Sora の SDK へのサポートはありますか？

Sora の SDK サポートは提供していません。また有償のサポートも提供していません。

もしアドバイスが必要だったり、問題が起きたりした場合は Discord へお願いします。バグ対応は最優先で行います。

### Discord サーバーの招待 URL



- Sora JavaScript SDK- `#sora-js-sdk` チャンネル
- Sora iOS SDK- `#sora-ios-sdk` チャンネル
- Sora Android SDK- `#sora-android-sdk` チャンネル
- Sora Unity SDK- `#sora-unity-sdk` チャンネル
- Sora C++ SDK- `#sora-cpp-sdk` チャンネル
- Sora Flutter SDK- `#sora-flutter-sdk` チャンネル

### JavaScript SDK はありますか？

Sora の JavaScript SDK に関しては以下をご確認ください。

- [Sora JavaScript SDK ドキュメント — Sora JavaScript SDK](https://sora-js-sdk.shiguredo.jp/)
- [WebRTC SFU Sora JavaScript SDK](https://github.com/shiguredo/sora-js-sdk)

### iOS SDK はありますか？

Sora の iOS SDK に関しては以下をご確認ください。 Swift で書かれています。

- [Sora iOS SDK ドキュメント — Sora iOS SDK](https://sora-ios-sdk.shiguredo.jp/)
- [WebRTC SFU Sora iOS SDK](https://github.com/shiguredo/sora-ios-sdk)
- [WebRTC SFU Sora iOS SDK クイックスタート](https://github.com/shiguredo/sora-ios-sdk-quickstart)
- [WebRTC SFU Sora iOS SDK サンプル集](https://github.com/shiguredo/sora-ios-sdk-samples)

### Android SDK はありますか？

Sora の Android SDK に関しては以下をご確認ください。 Kotlin で書かれています。

- [Sora Android SDK ドキュメント — Sora Android SDK](https://sora-android-sdk.shiguredo.jp/)
- [WebRTC SFU Sora Android SDK](https://github.com/shiguredo/sora-android-sdk)
- [WebRTC SFU Sora Android SDK クイックスタート](https://github.com/shiguredo/sora-android-sdk-quickstart)
- [WebRTC SFU Sora Android SDK サンプルアプリケーション](https://github.com/shiguredo/sora-android-sdk-samples)

### C++ SDK はありますか？

Sora の C++ SDK に関しては以下をご確認ください。 C++ で書かれています。

- [WebRTC SFU Sora C++ SDK](https://github.com/shiguredo/sora-cpp-sdk)
- [WebRTC SFU Sora C++ SDK サンプル集](https://github.com/shiguredo/sora-cpp-sdk-samples)

### Unity SDK はありますか？

Sora の Unity SDK に関しては以下をご確認ください。 C++ SDK をベースにしています。

- [WebRTC SFU Sora Unity SDK](https://github.com/shiguredo/sora-unity-sdk)
- [WebRTC SFU Sora Unity SDK サンプル集](https://github.com/shiguredo/sora-unity-sdk-samples)

### Flutter SDK はありますか？

Sora の C++ SDK に関しては以下をご確認ください。 C++ SDK をベースにしています。

- [WebRTC SFU Sora Flutter SDK](https://github.com/shiguredo/sora-flutter-sdk)

### JavaScript SDK は認証付き HTTP Proxy に対応していますか？

JavaScript SDK はブラウザで動作するため、ブラウザが WebRTC での HTTP Proxy に対応している必要があります。

主要なブラウザは HTTP Proxy に対応済みです。利用する場合はブラウザで HTTP Proxy の設定をしてください。

### iOS / Android / Unity / C++ SDK は認証付き HTTP Proxy に対応していますか？

対応しています。ただし Basic 認証のみの対応で、 **OS の設定や PAC ファイルへの対応は未定です** 。

- iOS SDK- 最新版で対応済みです
- Android SDK- 最新版で対応済みです
- C++ SDK- 最新版で対応済みです
- Unity SDK- 最新版で対応済みです
- Flutter SDK- 最新版で対応済みです

### ブラウザレスな WebRTC クライアントアプリケーションはありますか？

OSS として WebRTC Native Client Momo を公開しています。

- [WebRTC Native Client Momo](https://momo.shiguredo.jp/)
- [shiguredo/momo: WebRTC Native Client Momo](https://github.com/shiguredo/momo)

## ライセンス

### 同時接続とは具体的に何を指していますか？

シグナリングの同時接続数を指しています。1 シグナリング接続で 1 同時接続です。

### ライセンスの同時接続数を超えた時はどうなりますか？

もし、最大同時 100 接続のライセンスファイルを利用している場合で 101 本目の接続がきた場合、 Sora は 101 本目の接続を拒否します。

### ライセンスの同時接続数の最小の値はいくつですか？

ライセンスの同時接続数の最小は 100 となります。

10 や 50 といったライセンスは提供しておりません。

### ライセンスの同時接続数は 100 単位ですか？

はい、その通りです。100 の次は 200 となり、100 同時接続単位となります。

110 や 150 といったライセンスは提供おりません。

### ライセンスの期限を過ぎた場合はどうなりますか？

動作上、既存の接続に対しては特に何もありませんが、新規の接続を受け付けなくなります。

### Sora の現在の同時接続数を確認する方法はありますか？

[GetStatsReport](EXPERIMENTAL_API.html#bbbfca) API の `total_ongoing_connections` で現在 Sora に接続している同時接続数が確認可能です。

### ライセンス期限のタイムゾーンを教えてください

UTC です。

### クラスター利用時に同一のライセンスを利用する方法はありますか？

あります。 `最大ノード数ライセンス` を利用することで、 1 つのクラスター構築時に同一のライセンスを利用することが可能になります。

`最大ノード数ライセンス` では、 1 クラスターで同一のライセンスを最大いくつのノードに適用できるかがあらかじめ定義されています。
そのため、クラスターを構築する際に、その最大ノード数までは同一ライセンスを利用することが可能になります。

詳細は [最大ノード数ライセンス](LICENSE.html#aee259) をご確認ください。

### 最大ノード数ライセンスの最大ノード数はいくつですか？

最大ノード数ライセンスの最大ノード数は 10 です。

## バージョンアップ

### バージョンアップは有償ですか？

ご購入いただいたライセンスが有効な期間は、バージョンアップはすべて無償で提供させていただきます。

### バージョンアップのタイミングは決まっていますか？

少なくとも年 2 回、 6 月と 12 月に大きめのバージョンアップを行います。

それ以外は何かしら問題があったタイミングで修正のバージョンアップを行います。

### Sora のバージョン表記

バージョン表記:

```
YYYY.RELEASE.FIX
```

- `YYYY` はリリースした年になります
- `RELEASE` はその年のリリース回数になります
- `FIX` は 0 から始まり、仕様が変わらない修正のみのリリース回数になります

リリース回数は社内でのリリース回数となるため、公開リリースの番号は飛ぶことがあります。
公開されるバージョンが 2020.1.0 の次が 2020.4.1 となったりすることがありますのでご了承ください

## サポート

### 古いバージョンの Sora のサポートは提供していますか？

いいえ。サポートは最新版の Sora を利用している場合のみ、受け付けています。

### Sora のサポートは電話で受け付けていますか？

いいえ。サポートはサポート専用のメールでのみ、受け付けています。

### Sora のサポートは 24 時間 365 日ですか？

いいえ。サポートは弊社営業日の 10:00-17:00 のみ、対応しています。

### SDK の有償サポートは受け付けていますか？

いいえ。Sora SDK の有償サポートは行っていません。

ただし GitHub 上ですべてのコードを公開しています。
もし何か問題が起きた場合は時雨堂コミュニティの Discord にてご相談ください。
バグ対応は最優先で行います。



### Zakuro や Hisui など関連ツールの有償サポートは受け付けていますか？

いいえ。関連ツールの有償サポートは行っていません。

ただし GitHub 上ですべてのコードを公開しています。
もし何か問題が起きた場合は時雨堂コミュニティの Discord にてご相談ください。
バグ対応は最優先で行います。


