FAQ¶
ここでは WebRTC SFU Sora に関するよくある質問についてまとめています。
WebRTC 全般¶
双方向配信には対応していますか?¶
対応しています。WebRTC のマルチストリームという技術を利用して実現しています。
クライアント側の負荷を考慮し、 1 チャネルに参加するクライアントは 12 までを推奨としています。
1 チャネルで 12 より多いクライアントで双方向の配信を行いたい場合は スポットライト機能 を検討するかサポートまでお問い合わせ下さい。
片方向配信には対応していますか?¶
対応しています。
片方向配信はどのくらいの接続数まで対応していますか?¶
Sora 1 で 1 チャネルに 1 万接続程度まで対応しています。
クラスターリレー機能を利用する事で 100 万接続以上への配信もできます。
音声検出による映像の切り替えには対応していますか?¶
対応しています。Sora 独自のスポットライト機能という名前で提供しています。
この機能は多人数で会議を行う場合に、クライアントやサーバーの負荷を減らせる技術です。
100 名以上が 1 チャネルに参加できます。
詳細は スポットライト機能 をご確認ください
スクリーンキャプチャ機能には対応していますか?¶
2024 年 6 月 の時点でスクリーンキャプチャ機能はブラウザでは Chrome と Firefox と Safari と Edge が対応しています。 getDisplayMedia を利用することで、実現できます。
マルチストリームには対応していますか?¶
Tip
Sora はデフォルトでマルチストリームを利用します。
対応しています。ブラウザでは Chrome と Firefox と Safari と Edge で対応しています。
また、すべての SDK が対応しています。
マルチトラックには対応していますか?¶
対応していません。 Sora は 1 メディアストリームにつき 1 音声トラック、1 映像トラックまでしか対応していません。
マルチトラックへの対応は今のところ未定です。
複数の音声や複数の映像を 1 つのコネクションで配信することはできますか?¶
いいえ。 1 つのコネクションで複数ストリームを配信をすることはできません。
1 接続では 1 ストリーム (1 音声/1 映像) のみの配信ができます。
複数の配信を行いたい場合はマルチストリームの sendonly
ロールを利用して複数接続してください。
1 ユーザーで送受信と送信のみを利用している場合、送受信側で送信のみの音声や映像を受信しないことはできますか?¶
はい、できます。接続時、または認証成功時に bundle_id で同じ値を指定してください。
注釈
シグナリング時に bundle_id
を指定する場合は sora.conf
の signaling_bundle_id を true
にする必要があります。
bundle_id
が同じ接続では送信のみの音声と映像を送受信側で受信しなくなります。
映像コーデックは何がお勧めですか?¶
すべてのブラウザ、さらにほぼすべての端末で動作する VP9 か H.264 がお勧めです。
ただし、端末に VP9 のハードウェアアクセラレータが搭載されていることはほとんどないため、 H.264 を採用した方が電池消費量は減ります。
一方で、H.264 は一部の Android 端末で正常に動作しないことがあります。
すべての環境が Chrome に統一できる場合は AV1 をお勧めします。
H.264 や VP9 での映像配信に対応していますか?¶
ブラウザがそれぞれのコーデックに対応していれば、 Sora は問題なく配信できます。
2024 年 6 月 の時点では ...
Chrome M124 は VP8、 VP9、 AV1、 H.264 に対応しています
Firefox 124 は VP8、 VP9、 H.264 に対応しています
Edge 124 は VP8、 VP9、 H.264 に対応しています
Safari 17.4 は VP8、 VP9、 H.264 に対応しています
実験的機能として H.265 対応が追加されています
実験的機能として AV1 対応が追加されています
Sora は配信者がコーデックを選択できる仕組みを採用しています。
詳細は シグナリング をご確認ください
Safari は WebRTC に対応していますか?¶
はい。 Safari 12 で WebRTC に対応しました。
詳細は Apple Safari の WebRTC について をご確認ください。
Chrome や Edge では HTTPS が必須ですか?¶
はい。ローカルホスト以外からのアクセスでブラウザで getUserMedia を使用する場合は HTTPS が必須になります。
もし、開発中に HTTP でアクセスしたい場合は、以下を参考にしてください。
Safari では HTTPS が必須ですか?¶
はい。ただし、 開発者メニューから HTTP でも getUserMedia を使用できるようにするオプションが用意されています。
Edge は WebRTC に対応していますか?¶
はい。 Chrome とほぼ同等のレベルで WebRTC が利用できます。
詳細は Microsoft Edge の WebRTC について をご確認ください。
サーバー側からクライアントごとにコーデックやビットレートを指定できますか?¶
できます。 Sora からクライアントへ送信する Offer に含める SDP を、クライアントごとに指定できます。
詳細については 認証ウェブフック成功時の払い出し をご確認ください。
コーデックが異なるクライアントでも同じチャネルでの双方向通信はできますか?¶
できます。マルチストリームを利用することで接続ごとにコーデックを指定できます。
例えば、iOS の Safari は H.264 、デスクトップの Chrome は VP8 という場合でも同じチャネルでの双方向通信が利用できます。
ただし、ブラウザが非対応の場合はもちろん送受信できませんのでご注意ください。
Firefox で複数タブで音声デバイスを利用できますか?¶
いいえ。 Firefox 56 から複数タブで音声デバイスを利用できなくなりました。
Safari で音声が有効な場合、自動で視聴を開始できますか?¶
いいえ。 Safari の仕様で、音声が含まれている映像を自動で再生することはできません。
高いビットレートで配信することはできますか?¶
できます。ただし、Sora では最大 50 Mbps での配信ができますが、 今のところは 15 Mbps より大きなビットレートでの配信はサポート対象外とさせていただいています。
配信自体はできますが、クライアント、サーバーともに不安定になることがあるためです。
今後、高いビットレートでの配信を安定して実現できるようにしていく予定です。
4K 30fps を実現したいのですができますか?¶
できます。ただしクライアント側の負荷がとても高くなるため、かなり条件は厳しいです。
クライアントの負荷が高い場合、 ブラウザは自動的に解像度やフレームレートを下げる仕組みが入っているため、 4K 30fps を配信するためにはソフトウェアエンコードでの配信はかなり厳しいです。
そのため 4K 30fps に対応したハードウェアエンコーダーが必要になります。
時雨堂が公開している SDK はハードウェアエンコーダーに対応していますので、 対応しているハードウェアを用意していただければと思います。
また、時雨堂では WebRTC Native Client Momo という、 様々なハードウェアエンコーダーに対応したクライアントをオープンソースで公開していますので、是非試してみてください。
映像をフレームレート 60 や 120 で配信することはできますか?¶
できます。ただし Sora は映像のフレームレートには関与しません。
そのため、フレームレートはカメラが対応していること、また、クライアントが対応していることが必要になります。
カメラで指定した解像度より低い解像度で配信されるのですが?¶
カメラ映像の解像度と WebRTC でエンコードされて配信される解像度は一致しません。
カメラから入ってくる映像を WebRTC では圧縮して配信します。WebRTC は圧縮時に CPU 使用率が高い、ネットワーク帯域不足などの状況に応じ、自動で解像度やフレームレートを落として配信できる状態にして配信します。
WebRTC DataChannel には対応していますか?¶
対応しています。
2024 年 6 月 の時点では、シグナリング機能と メッセージング機能 として DataChannel を利用できます。
詳細は DataChannel 経由のシグナリング や メッセージング機能 をご確認ください。
音声のステレオには対応していますか?¶
対応しています。
ただしステレオで音声をエンコード/デコードするかどうかはクライアント側に依存します。
例えばブラウザの場合はデフォルトでステレオに対応していますが、エコーキャンセルが有効な場合はステレオは利用できません。 エコーキャンセルを無効にすることでステレオが利用できるようになります。
エコーキャンセルの設定は以下を参考にしてください。
MediaStreamTrack から connection_id は取得できますか?¶
できます。
Sora では自分以外の MediaStreamTrack の ID に {connection_id}-{audio | video}
という形式が含まれるようになっています。
そのため、MediaStreamTrack の ID から connection_id を取得することができます。
MediaStreamTrack の id や label 、getCapabilities の deviceId や getSettings の deviceId がこの形式になります。
"id": "CQE8KR2MAN1B1DD149NA2EX4MM-video"
"label": "CQE8KR2MAN1B1DD149NA2EX4MM-video"
"getCapabilities": {"deviceId": "CQE8KR2MAN1B1DD149NA2EX4MM-video", ...
"getSettings": {"deviceId": "CQE8KR2MAN1B1DD149NA2EX4MM-video", ...
危険
Firefox には対応していません
WebRTC 統計情報 inbound-rtp から connection_id は取得できますか?¶
できます。
Sora では WebRTC 統計情報 inbound-rtp
の trackIdentifier
に {connection_id}-{audio | video}
という形式が含まれるようになっています。
そのため、 trackIdentifier
から connection_id を取得することができます。
"trackIdentifier": "CQE8KR2MAN1B1DD149NA2EX4MM-video"
の用に含まれます。
危険
Firefox には対応していません
シグナリング¶
シグナリングは独自仕様ですか?¶
独自仕様です。 WebRTC の規格ではシグナリング部分は定義されていないため、 WebRTC で利用されるシグナリングは独自仕様が前提になります。
Sora は JSON over WebSocket
または JSON over DataChannel
をシグナリングの仕様として採用しています。
Sora の SDK を利用すればシグナリングを意識する必要がありません。
Sora のシグナリングの詳細な仕様について確認したい場合は、シグナリング をご確認ください。
注釈
OBS 向けのシグナリングは WHIP / WHEP という RFC で定義されているプロトコルに対応しています。
シグナリングに WebSocket (WS) ではなく WebSocket over TLS (WSS) を使うことはできますか?¶
できます。
getUserMedia
を使用する場合、 ローカルホスト以外のアクセスは WSS を必須としています。
ただし、Sora は WS のみに対応しています。
これは、実運用を考慮して、前段にリバースプロキシサーバーを立てていることを前提としており、 リバースプロキシサーバーで TLS を終端する構成を想定しているためです。
そのため、もし WSS を使う場合は、 nginx などのリバースプロキシサーバーを使用して TLS を終端してください。
注意
nginx の設定などについてはサポート対象外となりますので、お問い合わせはご遠慮ください
弊社では、TLS を終端するリバースプロキシサーバーには nginx の使用を推奨しています。
詳細については nginx をご確認ください。
OBS などで利用できる WHIP / WHEP 形式のシグナリングに対応していますか?¶
対応しています。
WHIP / WHEP は OBS のみの対応となります WHIP と WHEP に対応しています。
詳細については OBS Studio WHIP 対応機能 や OBS Studio WHEP 対応機能 をご確認ください。
接続単位で接続時間を知ることはできますか?¶
できます。Sora は接続ごとにタイマーを保持しており、 接続後 1 分ごとに外部のアプリケーションサーバーに HTTP 経由で接続の状態を報告します。
この報告はクライアントごとに独立しており、報告にはクライアント ID やチャネル ID やアプリケーションサーバーが認証時に指定した event_metadata が含まれています。 これらの情報を使用して、例えば、ユーザーごとに接続から 10 分経過したら切断する等の処理が簡単に行えます。
シグナリングで利用している WebSocket や DataChannel を使ってクライアントにメッセージ送ることはできますか?¶
できます。 プッシュ API を利用することでシグナリングで利用している WebSocket や DataChannel 経由でクライアントにメッセージを送ることができます。
または メッセージング機能 を利用してクライアント間でメッセージがやりとりできます。
クライアントがシグナリング経由で他の人の接続を通知で受け取ることはできますか?¶
できます、ただし同一チャネルのみに限ります。
シグナリング通知 をご確認ください。
シグナリングに DataChannel を使うことはできますか?¶
できます。ただし、WebRTC 接続確立までは WebSocket を利用する必要があります。
詳細は DataChannel 経由のシグナリング をご確認ください。
認証¶
シグナリング時の認証はできますか?¶
できます。ただし、Sora は認証機能を持っていますが、認証の判断をする仕組みを持っていません。 認証は外部のアプリケーションサーバーへウェブフックを送信し、その戻り値で判断を行います。
認証の判断材料として、
Sora のシグナリング開始時に任意の情報をクライアントに送ることができる metadata
を指定できます。
これは外部のアプリケーションサーバー側で払い出して使用できます。
認証のフローを以下に簡単に書き出しておきます。
外部のアプリケーションサーバーでアクセストークンをクライアントに払い出す
そのアクセストークンを
metadata
に入れて Sora に接続するSora はそのアクセストークンやコネクション ID を外部のアプリケーションサーバーに HTTP 経由で問い合わせる
外部のアプリケーションサーバーはそのアクセストークンが正しいことを確認し、
{"allowed": true}
を HTTP ステータスコード 200 番台で Sora に返すSora は Offer をクライアントに送る
sequenceDiagram participant C as クライアント participant S as Sora participant A as アプリケーションサーバー C->>+S: "type": "connect" S->>+A: 認証ウェブフック A-->>-S: 200 OK<br>"allowed": true S-)-C: "type": "offer" C-)S: "type": "answer" note over C,S: WebRTC 確立
外部の HTTP サーバーに対してウェブフックを送信し、
{"allowed": true}
と HTTP ステータスコード 200 番台 が返ってきたら認証を許可します。
詳細は 認証ウェブフック をご確認ください
シグナリングの認証失敗時に失敗の理由をクライアントに返せますか?¶
できます。外部のアプリケーションサーバーで Sora への認証ウェブフックの戻り値を返す場合、
{"allowed": false, "reason": "最大 100 バイトまでの文字列"}
という値を返す必要があります。
この reason
部分はクライアントに通知されます。
詳細は 認証ウェブフック をご確認ください
通知¶
チャネルに参加中のクライアントが、別のクライアントの参加や離脱を知ることはできますか?¶
できます。シグナリング通知機能を利用することにより、接続や切断のタイミングで、 シグナリングで利用している WebSocket または DataChannel 経由で通知されます。
詳細は シグナリング通知 をご確認ください。
チャネルに参加中のクライアントが、自分の録画開始/終了を知ることはできますか?¶
できます。シグナリング通知機能を利用することにより、録画の開始や終了のタイミングで、 シグナリングで利用している WebSocket または DataChannel 経由で通知されます。
詳細は シグナリング通知 をご確認ください。
参加者に Sora 側で変更できるメタデータをもたせることはできますか?¶
できます。シグナリング通知メタデータ拡張機能を利用することで、 接続や切断のタイミングで API 経由で変更したメタデータを通知できます。 さらにメタデータの変更時に参加者全員にプッシュで通知することもできます。
詳細は シグナリング通知メタデータ拡張 をご確認ください。
API¶
指定したコネクションのみを切断することはできますか?¶
できます。 Sora はチャネル ID とコネクション ID を指定して接続を切断できます。
詳細は DisconnectConnection をご確認ください。
指定したコネクションを切断した際に切断理由を含めることはできますか?¶
できます。 reason
を指定することで、イベントウェブフック connection.destroyed
の disconnect_api_reason
として指定した値が入ってきます。
詳細は DisconnectConnection をご確認ください。
指定したクライアントのみを切断することはできますか?¶
できます。 Sora はチャネル ID とクライアント ID を指定して接続を切断できます。
詳細は DisconnectClient をご確認ください。
指定したチャネルの配信者や視聴者のみを切断することはできますか?¶
できます。 Sora はチャネル ID を指定して配信者や視聴者のみを接続を切断できます。
詳細は DisconnectChannelByRole をご確認ください。
指定した配信者の映像を、指定した視聴者が受信しないことはできますか?¶
できます。Sora は配信者、視聴者のコネクション ID を指定して映像を Sora で一時的に止めることができます。
詳細は PauseRtpStream をご確認ください。
録画¶
Sora で録画した場合に出力されるファイルの形式は何ですか?¶
WebM 形式です。
Sora で録画した複数の WebM 形式のファイルを一つのファイルに出力することはできますか?¶
できますが、サポートの範囲外になります。 録画ファイル合成ツールをオープンソースとして公開しています。
録画した WebM 形式のファイルはブラウザで閲覧できますか?¶
できます。Chrome と Firefox、Edge で閲覧できます。 Safari では WebM 形式のファイルの閲覧に対応はしていますが VP9/Opus のファイルのみに対応しています。
警告
iOS 15.1 の Safari では WebM 形式を正常に読み込むことができません。 これは Safari 側のバグのようで、対応待ちです。
録画できるコーデックは何ですか?¶
映像コーデックは VP8 と VP9 と H.264 と AV1 、また音声コーデックは Opus に対応しています。 録画ファイルは WebM 形式で保存されます。
H.265 の録画には現時点で対応していません。
音声のみを録音できますか?¶
できます。Opus コーデックで音声のみの録音が可能になります。
webma
ファイルではなく webm
ファイルで出力されますのでご注意ください。
録画した WebM のサイズの例を教えてください¶
基本的には指定したビットレートで決まります。
例として、VP8 と Opus の組み合わせの WebM で、 VP8 の解像度が 640x480 でビットレートが 300kbps 程度、音声ありの場合、 1 分の映像で約 2.5 M バイトです。
録画が終了するタイミングを教えて下さい¶
録画終了するタイミングは 3 つあります。
StopRecording API が呼ばれた場合
接続が切断した場合
録画開始時に指定した期限が来た場合
録画の開始と終了をクライアントへ通知することはできますか?¶
できます。
シグナリング通知で recording.started
と recording.stopped
が送られます。
サイマルキャスト機能を利用した場合に録画はできますか?¶
できます。映像の優先度が一番低い映像を録画します。
映像の優先度については 映像の優先度 をご確認下さい。
スポットライト機能を利用した場合に録画はできますか?¶
できます。映像の優先度が一番低い映像を録画します。
映像の優先度については 映像の優先度 をご確認下さい。
録画関連ファイルをアップロードする仕組みはありますか?¶
できますが、サポートの範囲外になります。
Sora が出力した録画関連ファイルを、 Amazon S3 や S3 互換オブジェクトストレージにアップロードするツールをオープンソースとしてとして公開しています。
replaceTrack(null) を使うと、再生時に音声と映像がずれてしまいます¶
Chrome には、特定の条件で RTP タイムスタンプが正しく進まないという問題があり、 そのため Sora が生成する WebM ファイルの再生時に音声と映像がずれてしまうことがあります。
発生条件は、音声ストリームに対して RTCRtpSender.replaceTrack(null) https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpSender/replaceTrack を実行した後に RTCRtpSender.replaceTrack(audioTrack) した場合です。 この問題は Chrome/WebRTC のバグトラッカー https://bugs.chromium.org/p/webrtc/issues/detail?id=12020 で 管理されています。
録画時のキーフレーム要求間隔は何秒ですか?¶
録画機能利用時の 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 機能 をご確認ください
HTTPS で利用される 443 番のポートを TURN 機能で利用することはできますか?¶
できますが、nginx の利用が必須です。 詳細は TURN-TLS、TURN-TCP、シグナリングで 443 番ポートを使用する をご確認ください。
注意
nginx の設定などについてはサポート対象外となりますので、お問い合わせはご遠慮ください
Sora を使った場合、TURN サーバーで使用するユーザー名やクレデンシャルはどう払い出せば良いですか?¶
いくつか方法がありますが、ここでは Sora の認証機能と合わせて使用する方法をご紹介します。
Sora は認証を外部のアプリケーションサーバーに問い合わせます。この問い合わせの戻り値の JSON に metadata を含むことができます。 その戻された JSON の metadata はそのままクライアントまで払い出されます。
これを利用して、認証に成功した場合にのみ TURN の認証に使用するユーザー名とクレデンシャルを払い出すことができます。
認証時のクライアントへの metadata の払い出しについての詳細は metadata の払い出し をご確認ください。
TURN で UDP と TCP、TLS でどの経路が選択されるかはどう決められますか?¶
クライアント側の実装に依存します。Sora はクライアントがどの経路を選択するかには関与しません。
TURN IPv6 に対応していますか?¶
対応しています。
TURN の FQDN 設定はどのようなときに設定が必要ですか?¶
NAT64/DNS64 ネットワーク環境に対しては TURN の FQDN を設定する必要があります。
ウェブフック¶
ウェブフックのリクエスト送信先は複数登録できますか?¶
できません。
もし、送信先を複数にしたい場合は、登録した送信先のアプリケーションサーバーなどで対応をお願いします。
ウェブフックにベーシック認証は利用できますか?¶
できます。
sora.conf
にて webhook_basic_authn の設定を有効にして下さい。
詳細については ウェブフックリクエスト送信先のサーバーがベーシック認証を利用している場合 をご確認ください。
ウェブフックのタイムアウト値を設定できますか?¶
できます。
sora.conf
にて webhook_response_timeout を設定することで、ウェブフックのレスポンスのタイムアウトが変更できます。
イベントウェブフックの session.updated の送信間隔を 1 分から変更できますか?¶
できます。 sora.conf
にて session_updated_webhook_interval に 3 min
と設定することで、
session.updated のイベントウェブフックリクエストの送信間隔を 3 分に変更できます。
イベントウェブフックの session.updated を送らない設定はできますか?¶
できます。 sora.conf
にて ignore_session_updated_webhook を true
を設定することで、
session.updated のイベントウェブフックリクエストが送信されなくなります。
イベントウェブフックの connection.updated の戻り値を使用して切断などはできますか?¶
できません。切断をする場合は Sora が持つ切断 API を使用してください。
イベントウェブフックの connection.updated の送信間隔を 1 分から変更できますか?¶
できます。 sora.conf
にて connection_updated_webhook_interval に 3 min
と設定することで、
connection.updated のイベントウェブフックリクエストの送信間隔を 3 分に変更できます。
イベントウェブフックの connection.updated を送らない設定はできますか?¶
できます。 sora.conf
にて ignore_connection_updated_webhook を true
を設定することで、
connection.updated のイベントウェブフックリクエストが送信されなくなります。
イベントウェブフックのワーカー数を変更することはできますか?¶
できます。同時接続数が増えた場合や、ウェブフックリクエスト送信先のサーバーの応答速度が遅い場合は、
sora.conf
にて event_webhook_worker_number の値を変更してください。
イベントウェブフックのワーカー割り当てに利用している値は channel_id
となります。
ワーカーが 10 の場合、 channel_id
が 100 利用している場合、1 ワーカーに 10 の channel_id
が割り当てられます。
イベントウェブフックの処理が遅くなった場合の挙動はどうなりますか?¶
イベントウェブフックワーカーがキューを持っており、もしそのワーカーがリクエストを処理中の場合、キューに追加されます。 そのリクエストの処理が終わりったらキューから取り出され処理されます。
認証ウェブフックの同時接続数の項目を利用してセッション単位の接続数制限をかけることはできますか?¶
できますが、厳密な制限をすることはできません。厳密な制限をかける場合はアプリ側で行っていただく必要があります。
詳細は 認証ウェブフックに含まれる同時接続数について をご確認ください。
DataChannel¶
DataChannel でメッセージを送ることはできますか?¶
できます。 Sora のメッセージング機能は DataChannel を利用しています。
詳細については メッセージング機能 をご確認ください。
DataChannel でクライアントが RTCPeerConnection.createDataChannel()
を利用することはできますか?¶
できません。Sora 側で用意された DataChannel を利用してください。
role が recvonly で受信のみでもメッセージング機能を利用してメッセージを送ることはできますか?¶
できます。メッセージングが送ることができるかどうかは direction
にのみ影響を受けます。
クラスター機能¶
クラスターには対応していますか?¶
対応しています。現在 1 クラスター最大 100 ノードまで対応しています。
詳細については クラスター機能 をご確認ください。
クラスター構築時に同一のライセンスを使う方法はありますか?¶
あります。通常は同一のライセンスを複数のノードで利用することはできませんが 最大ノード数ライセンス を利用することでできるようになります。
ロードバランスには対応していますか?¶
対応しています。
クラスター機能の一つとして、新規チャネルの接続は接続割合が少ない Sora ノードに割り振ります。
クラスターへの自動登録には対応していますか?¶
対応していません。
RegisterClusterNode API を利用してクラスターにノードを登録する必要があります。
クラスターの自動復旧には対応していますか?¶
対応しています。
ネットワーク障害やノード障害により、クラスターから離脱した場合 Sora は再度クラスターへの参加を自動で試みます。
ノード間通信は暗号化されていますか?¶
されていません。そのためプライベートネットワークまたは暗号化されたネットワークを利用してください。
2 ノードでもクラスターを構築できますか?¶
できます。ただし推奨していません。
2 ノードの場合、どちらかのノードに障害が発生するとクラスター全体が止まってしまうため、 可用性は 1 ノードの場合よりも低くなります。
そのため 3 ノード以上でクラスターを組むことをお勧めします。
クラスターからノードを離脱させたい場合はどうすれば良いですか?¶
Sora を終了することで離脱を行います。丁寧に離脱したい場合はモード切替で 新規コネクションブロックモード を指定し、 すべての接続を切断してから終了してください。
もしそのノードが今後もクラスターに参加しない場合、 PurgeClusterNode API を利用してクラスターからそのノードの情報を完全消去してください。
なおノード情報を完全消去せずに、一度に過半数のノードを離脱させてしまうと、 残ったノードも接続を処理できなくなってしまうので注意が必要です。 詳細については 全ノードが半数以下のグループに所属した場合の挙動 をご確認ください。
クラスターのディザスタリカバリーには対応していますか?¶
対応していません。今後対応予定はありますが、リリース時期は未定です。
クラスターのリレーには対応していますか?¶
対応しています。
クラスターの最大ノード数はいくつですか?¶
クラスターを構築するノードの最大数は 100 を想定しています。 これ以上のノード数でのクラスター構築を検討されている場合はサポートまでご連絡ください。
その他¶
IP アドレスは複数指定できますか?¶
できますが、運用が複雑になるため、現時点ではドキュメントには記載していません。 もし、IP アドレスの複数指定を利用したい場合は、サポートまでお問い合わせください。
基本的には、クライアントごとに IP アドレスを変更したい場合は、認証時の戻り値を使用してください。
配信者は音声と映像を配信し、視聴者は音声のみを受信することはできますか?¶
できます。視聴者は配信者からの映像や音声のどちらかだけを受け取るよう指定できます。
詳細は 配信または視聴メディアの選択 をご確認ください。
複数のユーザーの中で、発言していないユーザーは低画質な映像のみを配信し、発言しているユーザーは音声と高画質な映像を配信することはできますか?¶
スポットライト機能を利用すればできます。
詳細は スポットライト機能 をご確認ください
サイマルキャストに対応していますか?¶
対応しています。ブラウザは Chrome と Edge と Safari の最新バージョンに対応しています。 それ以外のブラウザでは配信はできませんが、視聴はできます。
映像コーデックは VP8、VP9、AV1、H.264、H.265 に対応しています。
VP8 サイマルキャストは Chrome と Edge と Safari が対応しています
VP9 サイマルキャストは Chrome と Edge が対応しています
AV1 サイマルキャストは Chrome と Edge が対応しています
H.264 サイマルキャストは Chrome と Edge と Safari が対応しています
H.265 サイマルキャストは Safari 実験的機能のみが対応しています
映像や音声を WebRTC 以外で出力する仕組みはありますか?¶
StartForwardingRtp API と StopForwardingRtp API を利用することで、 外部のサーバーに対して WebRTC の DTLS (暗号部分) を除いた RTP パケットを送ることができます。
FFmpeg などを使用することで、 RTP から HLS や MPEG-DASH などに変換することもできます。
映像の配信を一時的に止める仕組みはありますか?¶
PauseRtpStream API と ResumeRtpStream API を利用することで、 指定した接続からの映像の配信を一時的に停止できます。
HLS 配信はできますか?¶
Sora 単体ではできません。ただし、Sora の RTP 転送 API を利用して FFmpeg などに転送することで、HLS での配信ができます。
こちらのドキュメントは古いため参考程度にお願いします
HLS 配信 をご確認ください。
追いかけ再生はできますか?¶
Sora 単体ではできません。
ただし、Sora の RTP 転送 API を利用して FFmpeg などに転送することで、HLS での配信ができます。 そのため、この HLS での配信を利用することで追いかけ再生を実現できます。
こちらのドキュメントは古いため参考程度にお願いします
HLS 配信 をご確認ください。
WebRTC 確立するまでにかかる時間は知ることができますか?¶
GetStatsReport API の average_setup_time_msec
でシグナリング接続開始から WebRTC 接続が確立するまでにかかった平均時間が取得できます。
性能¶
負荷試験はどう行えばよいですか?¶
サポートの範囲外になりますが、Sora 専用の負荷試験ツールをオープンソースとして公開しています。
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 チャネルで最大何クライアントまで対応していますか?¶
2024.1.3 時点で最大 12 クライアントまで対応しています。それ以上を接続することもできますが、お勧めはできません。
もし、大規模での会議を行いたい場合は、現在実験的機能として提供中の スポットライト機能 の利用を検討してください。
運用¶
Sora を利用する場合、インターネット接続が必要ですか?¶
いいえ、必要ありません。
Sora はデフォルトでは外部アクセスをいっさい行わず、ライセンス確認も Sora 単体で行っています。 外部アクセスが発生するのは、ユーザーが sora.conf に明示的に設定を追加して、ウェブフック機能などを有効化した場合のみです。
その為、閉域網などのパブリックなネットワークへのアクセスができない環境でも利用頂けます。
WebSocket が通らないプロキシ環境がある場合はどうしたらよいですか?¶
WebSocket は TLS を利用しているため、おそらくプロキシは TLS を一度終端するタイプかと思われます。
接続に対して中身の解析を行うプロキシであれば、 WebSocket だけでなく、TURN-UDP や TURN-TCP、TURN-TLS も通らない可能性が高いです。
結果として WebSocket が通らないプロキシを利用している場合は WebRTC 自体が利用できない可能性が高いため、プロキシの設定を変更してもらう以外の方法はありません。
Sora は Prometheus 形式に対応した監視情報を出力しますか?¶
Sora 自体は Prometheus 形式の監視情報は出力しません。
その代わりにオープンソースとして Sora exporter を公開しています。
Sora をデーモン化せずに起動することはできますか?¶
できます。 Sora を起動する際、 bin/sora foreground
で起動してください。
Sora を systemd で利用することはできますか?¶
できます。 詳細は systemd をご確認ください。
Sora クラスターを利用せず、ロードバランサーを利用することはできますか?¶
できません。
Sora ではかならず同一チャネルの接続を同一 Sora に集約する必要があるためです。 もしロードバランサーを利用したい場合はクラスターを構築する必要があります。
Sora クラスターを利用して、ロードバランサーを利用することはできますか?¶
できます。
ロードバランサーは WebSocket に対応している必要があります。 さらにロードバランサー側では 30 秒以上のタイムアウトを設定する必要があります。 これは Sora は WebSocket と DataChannel をシグナリングに併用した場合 30 秒間隔で Ping を Sora から送るためです。
また、ロードバランサーを経由しないシグナリング接続もできるようにする必要があります。 これは Sora 側でシグナリングのリダイレクトを行い別の Sora に直接接続させる仕組みがあるためです。
Sora はコンテナ上で利用できますか?¶
Sora をコンテナで運用するのは推奨していませんが、利用できます。 サポートへ問い合わせする場合はコンテナに関係する問題を切り分けをして頂く必要があります。
Sora の WebSocket を利用したシグナリングのキープアライブの切断条件は何ですか?¶
Sora は デフォルトの設定では WebSocket 経由で 5 秒間隔で "type": "ping"
を送信し、
60 秒間で 1 回も "type": "pong"
が返って来こなかった場合、
Sora はシグナリング接続を切断します。
これらの時間について sora.conf
の設定 websocket_signaling_ping_interval と websocket_signaling_pong_timeout で変更できます。
Sora の DataChannel を利用したシグナリングの Sora 側からの切断条件は何ですか?¶
Sora は定期的に接続状態を確認する仕組みを持っており、その仕組みで切断かどうかを判断しています。
詳細は ICE コネクションステート をご確認ください。
Sora 1 台のサーバーでは最大同時接続数はいくつですか?¶
現状 1 台では 5000 接続までを推奨しています。
多くの接続を 1 台で行いたい場合、まずはサポートまでご相談ください。
Sora が対応している OS は何ですか?¶
2024.1.3 の時点では以下の OS に対応しています。
Ubuntu 22.04 LTS x86_64
Ubuntu 20.04 LTS x86_64
Red Hat Enterprise Linux 9 x86_64
マイナーバージョンアップ版は全てサポート対象です
可能な限り最新のバージョンをご利用ください
Red Hat Enterprise Linux 8 x86_64
マイナーバージョンアップ版は全てサポート対象です
可能な限り最新のバージョンをご利用ください
CentOS 7 x86_64
新規でのお客様向けには提供は行っておらず、既存のお客様向けにのみ提供しています
カーネルが古く Sora の性能が引き出せないため、非推奨としています
CentOS 7 のサポートが終了する 2024 年 6 月にて 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 カーネルチューニング をご確認ください。
ログローテーションはどうすれば良いですか?¶
sora.jsonl と connection.jsonl はローテションされませんので必要な部分で mv コマンドなどで移動してください。 ファイルが無い場合、新しく作られます。
erlang.log については自動でログローテーションを行いますので気にする必要はありません。
ログの詳細については ログファイル をご確認ください。
ログのタイムゾーンを教えてください¶
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 を設定できます
SELinux を利用する際の注意点はありますか?¶
Sora の log ディレクトリ以下にログを書き込めるようにする必要があります。
以下を参考にしてみてください。
映像が乱れたり止まったりする場合は何を確認するのが良いですか?¶
映像が乱れたり止まったりする場合はネットワーク回線が不安定なことがほとんどです。
この場合は切断時に生成される connection.jsonl
を確認してみてください。
このログで映像の送信側と受信側の統計情報が確認できますので、
映像が乱れたり止まったりした接続の connection_id
を記録しておいて下さい。
total_received_rtcp_rtpfb_generic_nack
total_sent_rtcp_rtpfb_generic_nack
この値が多ければ多いほど「再送要求」の回数が多く、回線が不安定だったことが把握できます。
connection.jsonl
の詳細については connection ログ をご確認ください。
Sora が突然終了しました¶
Sora は何か問題があり Sora が終了した場合 erl_crash.dump
というログを出力します。
このログが出力された場合はサポート問い合わせの手順に従ってサポートまでご連絡ください。
もし erl_crash.dump
が出力されずに Sora が終了した場合はカーネル側から停止された可能性があります。
まずは OOM Killer で殺されていないかどうかを確認してみてください。
Sora で利用している Erlang VM のフラグを指定することはできますか?¶
重要
この設定を利用する場合はサポートまでお問い合わせください
できます。環境変数 SORA_ADDITIONAL_ERL_ARGS
を利用してください。
クライアント毎に Sora への経路を変更することはできますか?¶
できます。認証成功時にクライアントに ipv4_address または ipv6_address を払い出すことで、 クライアントはその IP アドレスを利用して Sora へ接続を試みるようになります。
例えばインターネット経由とプライベートネットワーク経由で接続先を変えることができます。
パブリックネットワーク経由の場合は
ipv4_address
またはipv6_address
に Sora が利用しているサーバーのパブリック IP アドレスを設定してくださいプライベートネットワーク経由の場合は
ipv4_address
またはipv6_address
に Sora が利用しているサーバーのプライベート IP アドレスを設定してください
SDK¶
Sora の SDK は基本的にシグナリング処理のための SDK です。 WebRTC 部分は webrtc.org <https://webrtc.org/?hl=ja> が提供しているライブラリを利用しています。
Sora の SDK へのサポートはありますか?¶
Sora の SDK サポートは提供していません。また有償のサポートも提供していません。
もしアドバイスが必要だったり、問題が起きたりした場合は Discord へお願いします。バグ対応は最優先で行います。
Discord サーバーの招待 URL¶
SDK の質問や相談については sora-sdk-faq
を利用してください。
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 Python SDK
投稿時に
sora-python-sdk
タグを指定してください
Sora C SDK
投稿時に
sora-c-sdk
タグを指定してください
JavaScript SDK はありますか?¶
Sora の JavaScript SDK に関しては以下をご確認ください。
iOS SDK はありますか?¶
Sora の iOS SDK に関しては以下をご確認ください。 Swift で書かれています。
Android SDK はありますか?¶
Sora の Android SDK に関しては以下をご確認ください。 Kotlin で書かれています。
C++ SDK はありますか?¶
Sora の C++ SDK に関しては以下をご確認ください。 C++ で書かれています。
Unity SDK はありますか?¶
Sora の Unity SDK に関しては以下をご確認ください。 C++ SDK をベースにしています。
Python SDK はありますか?¶
Sora の Python SDK に関しては以下をご確認ください。 C++ SDK をベースにしています。
JavaScript SDK は認証付き HTTP Proxy に対応していますか?¶
JavaScript SDK はブラウザで動作するため、ブラウザが WebRTC での HTTP Proxy に対応している必要があります。
主要なブラウザは HTTP Proxy に対応済みです。利用する場合はブラウザで HTTP Proxy の設定をしてください。
iOS / Android / Unity / C++ SDK / Python SDK は認証付き HTTP Proxy に対応していますか?¶
対応しています。ただし Basic 認証のみの対応で、 OS の設定や PAC ファイルへの対応は未定です 。
iOS SDK
最新版で対応済みです
Android SDK
最新版で対応済みです
C++ SDK
最新版で対応済みです
Unity SDK
最新版で対応済みです
Python SDK
最新版で対応済みです
C SDK
対応していません
ブラウザレスな WebRTC クライアントアプリケーションはありますか?¶
OSS として WebRTC Native Client Momo を公開しています。
ライセンス¶
同時接続とは具体的に何を指していますか?¶
シグナリングの同時接続数を指しています。1 シグナリング接続で 1 同時接続です。
ライセンスの同時接続数を超えた時はどうなりますか?¶
もし、最大同時 100 接続のライセンスファイルを利用している場合で 101 本目の接続がきた場合、 Sora は 101 本目の接続を拒否します。
ライセンスの同時接続数の最小の値はいくつですか?¶
ライセンスの同時接続数の最小は 100 となります。
10 や 50 といったライセンスは提供しておりません。
ライセンスの同時接続数は 100 単位ですか?¶
はい、その通りです。100 の次は 200 となり、100 同時接続単位となります。
110 や 150 といったライセンスは提供おりません。
ライセンスの期限を過ぎた場合はどうなりますか?¶
動作上、既存の接続に対しては特に何もありませんが、新規の接続を受け付けなくなります。
Sora の現在の同時接続数を確認する方法はありますか?¶
GetStatsReport API の total_ongoing_connections
で現在 Sora に接続している同時接続数が確認できます。
ライセンス期限のタイムゾーンを教えてください¶
UTC です。
クラスター利用時に同一のライセンスを利用する方法はありますか?¶
あります。 最大ノード数ライセンス
を契約することで、 1 つのクラスター構築時に同一のライセンスを利用できるようになります。
最大ノード数ライセンス
では、 1 クラスターで同一のライセンスを最大いくつのノードに適用できるかがあらかじめ定義されています。
クラスターを構築する際に、その最大ノード数までは同一ライセンスを利用できます。
詳細は 最大ノード数ライセンス をご確認ください。
最大ノード数ライセンスで契約できる最大ノード数はいくつですか?¶
最大ノード数は 100 を想定しています。
アップデート¶
アップデートは有償ですか?¶
ライセンスをご契約いただいている期間は、無償でアップデートを提供させていただきます。
アップデートのタイミングは決まっていますか?¶
原則として毎年 6 月と 12 月に、機能の追加や改善、削除を目的としたアップデートを行います。
その他、必要に合わせて不定期に修正のアップデートを行うことがあります。
詳細は サポートライフサイクル をご確認ください。
Sora のバージョン表記¶
バージョン表記:
YYYY.MAJOR.FIX
YYYY
はリリースした年を示しますMAJOR
はその年のメジャーアップデートのリリース回数を示しますFIX
はバグフィックスアップデートおよびホットフィックスアップデートのリリース回数を示します
詳細は サポートライフサイクル をご確認ください。
サポート¶
古いバージョンの Sora のサポートは提供していますか?¶
以前は最新バージョンの利用に対してのみサポートを提供していましたが、Sora 2023.1.0 以降はサポート提供期間を約 12 ヶ月間に変更しました。
詳細は サポートライフサイクル をご確認ください。
Sora のサポートは電話で受け付けていますか?¶
いいえ。サポートはサポート専用のメールでのみ、受け付けています。
Sora のサポートは 24 時間 365 日ですか?¶
いいえ。サポートは弊社営業日の 10:00-17:00 のみ、対応しています。
SDK の有償サポートは受け付けていますか?¶
いいえ。Sora SDK の有償サポートは行っていません。
ただし GitHub 上ですべてのコードを公開しています。 もし何か問題が起きた場合は時雨堂コミュニティの Discord にてご相談ください。 バグ対応は最優先で行います。
Zakuro や Hisui など関連ツールの有償サポートは受け付けていますか?¶
いいえ。関連ツールの有償サポートは行っていません。
ただし GitHub 上ですべてのコードを公開しています。 もし何か問題が起きた場合は時雨堂コミュニティの Discord にてご相談ください。 バグ対応は最優先で行います。