########## FAQ ########## ここでは WebRTC SFU Sora に関するよくある質問についてまとめています。 WebRTC 全般 =========== 片方向配信には対応していますか? ---------------------------------- 対応しています。多くの視聴者に配信を行いたい場合はサポートまでご相談ください。 双方向配信には対応していますか? ---------------------------------- 対応しています。WebRTC のマルチストリームという技術を利用して実現しています。 |date| の時点で 1 チャネルに参加するクライアントは 12 までを推奨としています。 1 チャネルで 12 より多いクライアントで双方向の配信を行いたい場合は :doc:`スポットライト機能 ` を検討するかサポートまでお問い合わせ下さい。 音声検出による映像の切り替えには対応していますか? ---------------------------------------------------- 対応しています。Sora 独自のスポットライト機能という名前で提供しています。 この機能は多人数で会議を行う場合に、クライアントやサーバーの負荷を減らせる技術です。 100 名以上が 1 チャネルに参加できます。 詳細は :doc:`スポットライト機能 ` をご確認ください スクリーンキャプチャ機能には対応していますか? ---------------------------------------------- |date| の時点でスクリーンキャプチャ機能はブラウザでは Chrome と Firefox と Safari と Edge が対応しています。 getDisplayMedia を利用することで、実現できます。 `MediaDevices.getDisplayMedia() - Web APIs | MDN `_ マルチストリームには対応していますか? -------------------------------------- .. tips:: Sora はデフォルトでマルチストリームを利用します。 対応しています。ブラウザでは Chrome と Firefox と Safari と Edge で対応しています。 また、すべての SDK が対応しています。 マルチトラックには対応していますか? ------------------------------------ 対応していません。 Sora は 1 メディアストリームにつき 1 音声トラック、1 映像トラックまでしか対応していません。 マルチトラックへの対応は今のところ未定です。 複数の音声や映像を 1 つのコネクションで送ることはできますか? ---------------------------------------------------------------------- いいえ。 1 つのコネクションで複数ストリームを配信をすることはできません。 1 接続では 1 ストリーム (1 音声/1 映像) のみの配信ができます。 複数の配信を行いたい場合はマルチストリームの ``sendonly`` ロールを利用して複数接続してください。 1 ユーザーで送受信と送信のみを利用している場合、送受信側で送信のみの音声や映像を受信しないことはできますか? ------------------------------------------------------------------------------------------------------------------ はい、できます。接続時、または認証成功時に :ref:`bundle_id` で同じ値を指定してください。 .. note:: シグナリング時に ``bundle_id`` を指定する場合は ``sora.conf`` の :ref:`signaling_bundle_id` を ``true`` にする必要があります。 ``bundle_id`` が同じ接続では送信のみの音声と映像を送受信側で受信しなくなります。 映像コーデックは何がお勧めですか? ------------------------------------ すべてのブラウザ、さらにほぼすべての端末で動作する VP9 か H.264 がお勧めです。 ただし、端末に VP9 のハードウェアアクセラレータが搭載されていることはほとんどないため、 H.264 を採用した方が電池消費量は減ります。 一方で、H.264 は一部の Android 端末で正常に動作しないことがあります。 すべての環境が Chrome に統一できる場合は AV1 をお勧めします。 H.264 や VP9 での映像配信に対応していますか? ----------------------------------------------------- ブラウザがそれぞれのコーデックに対応していれば、 Sora は問題なく配信できます。 |date| の時点では ... - Chrome M120 は VP8、 VP9、 AV1、 H.264 に対応しています - Firefox 120 は VP8、 VP9、 H.264 に対応しています - Edge 120 は VP8、 VP9、 H.264 に対応しています - Safari 17.1 は VP8、 VP9、 H.264 に対応しています - 実験的機能として H.265 対応が追加されています - 実験的機能として AV1 対応が追加されています Sora は配信者がコーデックを選択できる仕組みを採用しています。 詳細は :doc:`シグナリング ` をご確認ください Safari は WebRTC に対応していますか? ------------------------------------- はい。 Safari 12 で WebRTC に対応しました。 詳細は :doc:`Apple Safari の WebRTC について ` をご確認ください。 .. _faq-browser-https: Chrome や Edge では HTTPS が必須ですか? ----------------------------------------- はい。ローカルホスト以外からのアクセスでブラウザで getUserMedia を使用する場合は HTTPS が必須になります。 もし、開発中に HTTP でアクセスしたい場合は、以下を参考にしてください。 `http でのアクセスでカメラの映像を取得する - Qiita `_ Safari では HTTPS が必須ですか? ------------------------------------ はい。ただし、 開発者メニューから HTTP でも getUserMedia を使用できるようにするオプションが用意されています。 Edge は WebRTC に対応していますか? ----------------------------------- はい。 Chrome とほぼ同等のレベルで WebRTC が利用できます。 詳細は :doc:`Microsoft Edge の WebRTC について ` をご確認ください。 サーバー側からクライアントごとにコーデックやビットレートを指定できますか? -------------------------------------------------------------------------------- できます。 Sora からクライアントへ送信する Offer に含める SDP を、クライアントごとに指定できます。 詳細については :ref:`認証ウェブフック成功時の払い出し` をご確認ください。 コーデックが異なるクライアントでも同じチャネルでの双方向通信はできますか? --------------------------------------------------------------------------------- できます。マルチストリームを利用することで接続ごとにコーデックを指定できます。 例えば、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 `_ という、 様々なハードウェアエンコーダーに対応したクライアントをオープンソースで公開していますので、是非試してみてください。 `shiguredo/momo: WebRTC Native Client Momo `_ 映像をフレームレート 60 や 120 で配信することはできますか? ------------------------------------------------------------ できます。ただし Sora は映像のフレームレートには関与しません。 そのため、フレームレートはカメラが対応していること、また、クライアントが対応していることが必要になります。 カメラで指定した解像度より低い解像度で配信されるのですが? ------------------------------------------------------------- カメラ映像の解像度と WebRTC でエンコードされて配信される解像度は一致しません。 カメラから入ってくる映像を WebRTC では圧縮して配信します。WebRTC は圧縮時に CPU 使用率が高い、ネットワーク帯域不足などの状況に応じ、自動で解像度やフレームレートを落として配信できる状態にして配信します。 WebRTC DataChannel には対応していますか? ------------------------------------------ 対応しています。 |date| の時点では、シグナリング機能とメッセージング機能として DataChannel を利用できます。 詳細は :doc:`DataChannel 経由のシグナリング ` や :doc:`メッセージング機能 ` をご確認ください。 音声のステレオには対応していますか? --------------------------------------------- 対応しています。 ただしステレオで音声をエンコード/デコードするかどうかはクライアント側に依存します。 例えばブラウザの場合はデフォルトでステレオに対応していますが、エコーキャンセルが有効な場合はステレオは利用できません。 エコーキャンセルを無効にすることでステレオが利用できるようになります。 エコーキャンセルの設定は以下を参考にしてください。 `Media Capture and Streams `_ シグナリング ============ シグナリングは独自仕様ですか? ------------------------------ 独自仕様です。 WebRTC の規格ではシグナリング部分は定義されていないため、 WebRTC で利用されるシグナリングは独自仕様が前提になります。 Sora は ``JSON over WebSocket`` または ``JSON over DataChannel`` をシグナリングの仕様として採用しています。 Sora の SDK を利用すればシグナリングを意識する必要がありません。 Sora のシグナリングの詳細な仕様について確認したい場合は、:doc:`シグナリング ` をご確認ください。 シグナリングに WebSocket (WS) ではなく WebSocket over TLS (WSS) を使うことはできますか? -------------------------------------------------------------------------------------------- できます。 ``getUserMedia`` を使用する場合、 ローカルホスト以外のアクセスは WSS を必須としています。 ただし、Sora は WS のみに対応しています。 これは、実運用を考慮して、前段にリバースプロキシサーバーを立てていることを前提としており、 リバースプロキシサーバーで TLS を終端する構成を想定しているためです。 そのため、もし WSS を使う場合は、 nginx などのリバースプロキシサーバーを使用して TLS を終端してください。 .. attention:: nginx の設定などについてはサポート対象外となりますので、お問い合わせはご遠慮ください 弊社では、TLS を終端するリバースプロキシサーバーには nginx の使用を推奨しています。 詳細については :doc:`nginx ` をご確認ください。 .. _getUserMedia: https://developer.mozilla.org/ja/docs/Web/API/MediaDevices/getUserMedia 接続単位で接続時間を知ることはできますか? -------------------------------------------------- できます。Sora は接続ごとにタイマーを保持しており、 接続後 1 分ごとに外部のアプリケーションサーバーに HTTP 経由で接続の状態を報告します。 この報告はクライアントごとに独立しており、報告にはクライアント ID やチャネル ID やアプリケーションサーバーが認証時に指定した event_metadata が含まれています。 これらの情報を使用して、例えば、ユーザーごとに接続から 10 分経過したら切断する等の処理が簡単に行えます。 シグナリングで利用している WebSocket や DataChannel を使ってクライアントにメッセージ送ることはできますか? ---------------------------------------------------------------------------------------------------------- できます。 :ref:`プッシュ API` を利用することでシグナリングで利用している WebSocket や DataChannel 経由でクライアントにメッセージを送ることができます。 または :doc:`メッセージング機能 ` を利用してクライアント間でメッセージがやりとりできます。 クライアントがシグナリング経由で他の人の接続を通知で受け取ることはできますか? ------------------------------------------------------------------------------ できます、ただし同一チャネルのみに限ります。 :doc:`シグナリング通知 ` をご確認ください。 シグナリングに DataChannel を使うことはできますか? ---------------------------------------------------- できます。ただし、WebRTC 接続確立までは WebSocket を利用する必要があります。 詳細は :doc:`DataChannel 経由のシグナリング ` をご確認ください。 認証 ==== シグナリング時の認証はできますか? ---------------------------------- できます。ただし、Sora 自体は認証機能を持っていません。 Sora のシグナリング開始時に任意の情報をクライアントに送ることができる ``metadata`` を指定できます。 これは外部のアプリケーションサーバー側で払い出して使用できます。 認証のフローを以下に簡単に書き出しておきます。 #. 外部のアプリケーションサーバーでアクセストークンをクライアントに払い出す #. そのアクセストークンを ``metadata`` に入れて Sora に接続する #. Sora はそのアクセストークンやコネクション ID を外部のアプリケーションサーバーに HTTP 経由で問い合わせる #. 外部のアプリケーションサーバーはそのアクセストークンが正しいことを確認し、 ``{"allowed": true}`` を HTTP ステータスコード 200 番台で Sora に返す #. Sora は Offer をクライアントに送る .. mermaid:: sequenceDiagram participant C as クライアント participant S as Sora participant A as アプリケーションサーバー C->>+S: "type": "connect" S->>+A: 認証ウェブフック A-->>-S: 200 OK
"allowed": true S-)-C: "type": "offer" C-)S: "type": "answer" note over C,S: WebRTC 確立 外部の HTTP サーバーに対して問い合わせを行い、 ``{"allowed": true}`` と HTTP ステータスコード 200 番台 が返ってきたら認証を許可します。 詳細は :doc:`認証ウェブフック ` をご確認ください シグナリングの認証失敗時に失敗の理由をクライアントに返せますか? ----------------------------------------------------------------------- できます。外部のアプリケーションサーバーで Sora への認証ウェブフックの戻り値を返す場合、 ``{"allowed": false, "reason": "最大 100 バイトまでの文字列"}`` という値を返す必要があります。 この ``reason`` 部分はクライアントに通知されます。 詳細は :doc:`認証ウェブフック ` をご確認ください 通知 ==== チャネルに参加中のクライアントが、別のクライアントの参加や離脱を知ることはできますか? -------------------------------------------------------------------------------------------- できます。シグナリング通知機能を利用することにより、接続や切断のタイミングで、 シグナリングで利用している WebSocket または DataChannel 経由で通知されます。 詳細は :doc:`シグナリング通知 ` をご確認ください。 チャネルに参加中のクライアントが、自分の録画開始/終了を知ることはできますか? --------------------------------------------------------------------------------- できます。シグナリング通知機能を利用することにより、録画の開始や終了のタイミングで、 シグナリングで利用している WebSocket または DataChannel 経由で通知されます。 詳細は :doc:`シグナリング通知 ` をご確認ください。 参加者に Sora 側で変更できるメタデータをもたせることはできますか? ---------------------------------------------------------------------------- できます。シグナリング通知メタデータ拡張機能を利用することで、 接続や切断のタイミングで API 経由で変更したメタデータを通知できます。 さらにメタデータの変更時に参加者全員にプッシュで通知することもできます。 詳細は :doc:`シグナリング通知メタデータ拡張 ` をご確認ください。 API === 指定したコネクションのみを切断することはできますか? --------------------------------------------------------- できます。 Sora はチャネル ID とコネクション ID を指定して接続を切断できます。 詳細は :ref:`20151104.DisconnectConnection` をご確認ください。 指定したコネクションを切断した際に切断理由を含めることはできますか? ---------------------------------------------------------------------------- できます。 ``reason`` を指定することで、イベントウェブフック ``connection.destroyed`` の ``disconnect_api_reason`` として指定した値が入ってきます。 詳細は :ref:`20151104.DisconnectConnection` をご確認ください。 指定したクライアントのみを切断することはできますか? --------------------------------------------------------- できます。 Sora はチャネル ID とクライアント ID を指定して接続を切断できます。 詳細は :ref:`20151104.DisconnectClient` をご確認ください。 指定したチャネルの配信者や視聴者のみを切断することはできますか? ----------------------------------------------------------------------- できます。 Sora はチャネル ID を指定して配信者や視聴者のみを接続を切断できます。 詳細は :ref:`20201120.DisconnectChannelByRole` をご確認ください。 指定した配信者の映像を、指定した視聴者が受信しないことはできますか? -------------------------------------------------------------------- できます。Sora は配信者、視聴者のコネクション ID を指定して映像を Sora で一時的に止めることができます。 詳細は :ref:`20200401.PauseRtpStream` をご確認ください。 録画 ==== Sora で録画した場合に出力されるファイルの形式は何ですか? ----------------------------------------------------------- WebM 形式です。 - `The WebM Project | Welcome to the WebM Project `_ - `WebM - Wikipedia `_ Sora で録画した複数の WebM 形式のファイルを一つのファイルに出力することはできますか? ------------------------------------------------------------------------------------- できますが、サポートの範囲外になります。 録画ファイル合成ツールをオープンソースとして公開しています。 `Recording Composition Tool Hisui `_ 録画した WebM 形式のファイルはブラウザで閲覧できますか? -------------------------------------------------------- できます。Chrome と Firefox、Edge で閲覧できます。 Safari では WebM 形式のファイルの閲覧に対応はしていますが VP9/Opus のファイルのみに対応しています。 .. warning:: iOS 15.1 の Safari では WebM 形式を正常に読み込むことができません。 これは Safari 側のバグのようで、対応待ちです。 録画できるコーデックは何ですか? ---------------------------------------- 映像コーデックは VP8 と VP9 と H.264 と AV1 、また音声コーデックは Opus と Lyra に対応しています。 録画ファイルは WebM 形式で保存されます。 H.265 の録画には現時点で対応していません。 音声のみを録音できますか? -------------------------- できます。Opus と Lyra コーデックで音声のみの録音が可能になります。 ``webma`` ファイルではなく ``webm`` ファイルで出力されますのでご注意ください。 録画した WebM のサイズの例を教えてください ------------------------------------------ 基本的には指定したビットレートで決まります。 例として、VP8 と Opus の組み合わせの WebM で、 VP8 の解像度が 640x480 でビットレートが 300kbps 程度、音声ありの場合、 1 分の映像で約 2.5 M バイトです。 録画が終了するタイミングを教えて下さい --------------------------------------- 録画終了するタイミングは 3 つあります。 #. :ref:`20161101.StopRecording` API が呼ばれた場合 #. 接続が切断した場合 #. 録画開始時に指定した期限が来た場合 録画の開始と終了をクライアントへ通知することはできますか? --------------------------------------------------------------- できます。 シグナリング通知で ``recording.started`` と ``recording.stopped`` が送られます。 サイマルキャスト機能を利用した場合に録画はできますか? ---------------------------------------------------------- できます。映像の優先度が一番低い映像を録画します。 映像の優先度については :ref:`映像の優先度` をご確認下さい。 スポットライト機能を利用した場合に録画はできますか? ---------------------------------------------------------- できます。映像の優先度が一番低い映像を録画します。 映像の優先度については :ref:`映像の優先度` をご確認下さい。 録画関連ファイルをアップロードする仕組みはありますか? ----------------------------------------------------------- できますが、サポートの範囲外になります。 Sora が出力した録画関連ファイルを、 Amazon S3 や S3 互換オブジェクトストレージにアップロードするツールをオープンソースとしてとして公開しています。 `Sora Archive Uploader `_ 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 必須 詳細は :doc:`TURN 機能 ` をご確認ください HTTPS で利用される 443 番のポートを TURN 機能で利用することはできますか? ----------------------------------------------------------------------------------------- できますが、nginx の利用が必須です。 詳細は :ref:`turn-tls-turn-tcp-signaling-443-port` をご確認ください。 .. attention:: nginx の設定などについてはサポート対象外となりますので、お問い合わせはご遠慮ください Sora を使った場合、TURN サーバーで使用するユーザー名やクレデンシャルはどう払い出せば良いですか? -------------------------------------------------------------------------------------------------- いくつか方法がありますが、ここでは Sora の認証機能と合わせて使用する方法をご紹介します。 Sora は認証を外部のアプリケーションサーバーに問い合わせます。この問い合わせの戻り値の JSON に metadata を含むことができます。 その戻された JSON の metadata はそのままクライアントまで払い出されます。 これを利用して、認証に成功した場合にのみ TURN の認証に使用するユーザー名とクレデンシャルを払い出すことができます。 認証時のクライアントへの metadata の払い出しについての詳細は :ref:`metadata の払い出し` をご確認ください。 TURN で UDP と TCP、TLS でどの経路が選択されるかはどう決められますか? ---------------------------------------------------------------------------- クライアント側の実装に依存します。Sora はクライアントがどの経路を選択するかには関与しません。 TURN IPv6 に対応していますか? ------------------------------- 対応しています。 TURN の FQDN 設定はどのようなときに設定が必要ですか? -------------------------------------------------------- NAT64/DNS64 ネットワーク環境に対しては TURN の FQDN を設定する必要があります。 ウェブフック ============ ウェブフックのリクエスト送信先は複数登録できますか? -------------------------------------------------------------------- できません。 もし、送信先を複数にしたい場合は、登録した送信先のアプリケーションサーバーなどで対応をお願いします。 ウェブフックにベーシック認証は利用できますか? ----------------------------------------------- できます。 ``sora.conf`` にて :ref:`sora_conf-webhook_basic_authn` の設定を有効にして下さい。 詳細については :ref:`ウェブフックリクエスト送信先のサーバーがベーシック認証を利用している場合` をご確認ください。 ウェブフックのタイムアウト値を設定できますか? ------------------------------------------------ できます。 ``sora.conf`` にて :ref:`sora_conf-webhook_response_timeout` を設定することで、ウェブフックのレスポンスのタイムアウトが変更できます。 イベントウェブフックの session.updated の送信間隔を 1 分から変更できますか? ----------------------------------------------------------------------------------- できます。 ``sora.conf`` にて :ref:`sora_conf-session_updated_webhook_interval` に ``3 min`` と設定することで、 session.updated のイベントウェブフックリクエストの送信間隔を 3 分に変更できます。 イベントウェブフックの session.updated を送らない設定はできますか? ----------------------------------------------------------------------- できます。 ``sora.conf`` にて :ref:`sora_conf-ignore_session_updated_webhook` を ``true`` を設定することで、 session.updated のイベントウェブフックリクエストが送信されなくなります。 イベントウェブフックの connection.updated の戻り値を使用して切断などはできますか? ---------------------------------------------------------------------------------- できません。切断をする場合は Sora が持つ切断 API を使用してください。 イベントウェブフックの connection.updated の送信間隔を 1 分から変更できますか? ----------------------------------------------------------------------------------- できます。 ``sora.conf`` にて :ref:`sora_conf-connection_updated_webhook_interval` に ``3 min`` と設定することで、 connection.updated のイベントウェブフックリクエストの送信間隔を 3 分に変更できます。 イベントウェブフックの connection.updated を送らない設定はできますか? ----------------------------------------------------------------------- できます。 ``sora.conf`` にて :ref:`sora_conf-ignore_connection_updated_webhook` を ``true`` を設定することで、 connection.updated のイベントウェブフックリクエストが送信されなくなります。 イベントウェブフックのワーカー数を変更することはできますか? --------------------------------------------------------------- できます。同時接続数が増えた場合や、ウェブフックリクエスト送信先のサーバーの応答速度が遅い場合は、 ``sora.conf`` にて :ref:`sora_conf-event_webhook_worker_number` の値を変更してください。 イベントウェブフックのワーカー割り当てに利用している値は ``channel_id`` となります。 ワーカーが 10 の場合、 ``channel_id`` が 100 利用している場合、1 ワーカーに 10 の ``channel_id`` が割り当てられます。 イベントウェブフックの処理が遅くなった場合の挙動はどうなりますか? ------------------------------------------------------------------------ イベントウェブフックワーカーがキューを持っており、もしそのワーカーがリクエストを処理中の場合、キューに追加されます。 そのリクエストの処理が終わりったらキューから取り出され処理されます。 認証ウェブフックの同時接続数の項目を利用してセッション単位の接続数制限をかけることはできますか? -------------------------------------------------------------------------------------------------- できますが、厳密な制限をすることはできません。厳密な制限をかける場合はアプリ側で行っていただく必要があります。 詳細は :ref:`auth-webhook-channel-ongoing-connections-count` をご確認ください。 DataChannel ================= DataChannel でメッセージを送ることはできますか? ----------------------------------------------------- できます。 Sora のメッセージング機能は DataChannel を利用しています。 詳細については :doc:`メッセージング機能 ` をご確認ください。 DataChannel でクライアントが ``RTCPeerConnection.createDataChannel()`` を利用することはできますか? ---------------------------------------------------------------------------------------------------- できません。Sora 側で用意された DataChannel を利用してください。 role が recvonly で受信のみでもメッセージング機能を利用してメッセージを送ることはできますか? ---------------------------------------------------------------------------------------------------- できます。メッセージングが送ることができるかどうかは ``direction`` にのみ影響を受けます。 クラスター機能 ================ クラスターには対応していますか? -------------------------------------------- 対応しています。現在 1 クラスター最大 10 ノードまで対応しています。 詳細については :doc:`クラスター機能 ` をご確認ください。 クラスター構築時に同一のライセンスを使う方法はありますか? ---------------------------------------------------------- あります。通常は同一のライセンスを複数のノードで利用することはできませんが :ref:`max_nodes_license` を利用することでできるようになります。 ロードバランスには対応していますか? -------------------------------------------- 対応しています。 クラスター機能の一つとして、新規チャネルの接続は接続割合が少ない Sora ノードに割り振ります。 クラスターへの自動参加には対応していますか? -------------------------------------------- 対応しています。 ``sora.conf`` の ``contact_node_name_list`` に書かれている Sora ノードに自動で参加を試みます。 クラスターの自動復旧には対応していますか? -------------------------------------------- 対応しています。 ネットワーク障害やノード障害により、クラスターから離脱した場合 Sora は再度クラスターへの参加を自動で試みます。 ノード間通信は暗号化されていますか? -------------------------------------------- されていません。そのためプライベートネットワークまたは暗号化されたネットワークを利用してください。 2 ノードでもクラスターを構築できますか? -------------------------------------------------------- できます。ただし推奨していません。 2 ノードの場合、どちらかのノードに障害が発生するとクラスター全体が止まってしまうため、 可用性は 1 ノードの場合よりも低くなります。 そのため 3 ノード以上でクラスターを組むことをお勧めします。 クラスターからノードを離脱させたい場合はどうすれば良いですか? ---------------------------------------------------------------------- Sora を終了することで離脱を行います。丁寧に離脱したい場合はモード切替で :ref:`新規コネクションブロックモード` を指定し、 すべての接続を切断してから終了してください。 もしそのノードが今後もクラスターに参加しない場合、 :ref:`20220629.PurgeClusterNode` API を利用してクラスターからそのノードの情報を完全消去してください。 なおノード情報を完全消去せずに、一度に過半数のノードを離脱させてしまうと、 残ったノードも接続を処理できなくなってしまうので注意が必要です。 詳細については :ref:`全ノードが半数以下のグループに所属した場合の挙動` をご確認ください。 クラスターのディザスタリカバリーには対応していますか? ------------------------------------------------------------ 対応していません。今後対応予定はありますが、リリース時期は未定です。 クラスターのリレーには対応していますか? ---------------------------------------------------------- 対応していません。 2024 年にリリース予定です。 クラスターの最大ノード数はいくつですか? ---------------------------------------------- クラスターを構築するノードの最大数は 10 を想定しています。 これ以上のノード数でのクラスター構築を検討されている場合はサポートまでご連絡ください。 その他 ====== IP アドレスは複数指定できますか? ----------------------------------- できますが、運用が複雑になるため、現時点ではドキュメントには記載していません。 もし、IP アドレスの複数指定を利用したい場合は、サポートまでお問い合わせください。 基本的には、クライアントごとに IP アドレスを変更したい場合は、認証時の戻り値を使用してください。 配信者は音声と映像を配信し、視聴者は音声のみを受信することはできますか? ------------------------------------------------------------------------ できます。視聴者は配信者からの映像や音声のどちらかだけを受け取るよう指定できます。 詳細は :ref:`配信または視聴メディアの選択` をご確認ください。 複数のユーザーの中で、発言していないユーザーは低画質な映像のみを配信し、発言しているユーザーは音声と高画質な映像を配信することはできますか? ---------------------------------------------------------------------------------------------------------------------------------------------- スポットライト機能を利用すればできます。 詳細は :doc:`スポットライト機能 ` をご確認ください サイマルキャストに対応していますか? ------------------------------------ 対応しています。ブラウザは Chrome と Edge と Safari の最新バージョンに対応しています。 それ以外のブラウザでは配信はできませんが、視聴はできます。 映像コーデックは VP8、VP9、AV1、H.264、H.265 に対応しています。 - VP8 サイマルキャストは Chrome と Edge と Safari が対応しています - VP9 サイマルキャストは Chrome と Edge が対応しています - AV1 サイマルキャストは Chrome のみが対応しています - H.264 サイマルキャストは Chrome と Edge と Safari が対応しています - H.265 サイマルキャストは Safari 実験的機能のみが対応しています 映像や音声を WebRTC 以外で出力する仕組みはありますか? ------------------------------------------------------- :ref:`20170814.StartForwardingRtp` API と :ref:`20170814.StopForwardingRtp` API を利用することで、 外部のサーバーに対して WebRTC の DTLS (暗号部分) を除いた RTP パケットを送ることができます。 FFmpeg などを使用することで、 RTP から HLS や MPEG-DASH などに変換することもできます。 映像の配信を一時的に止める仕組みはありますか? ---------------------------------------------- :ref:`20200401.PauseRtpStream` API と :ref:`20200401.ResumeRtpStream` API を利用することで、 指定した接続からの映像の配信を一時的に停止できます。 HLS 配信はできますか? ---------------------- Sora 単体ではできません。ただし、Sora の :doc:`RTP 転送 API ` を利用して FFmpeg などに転送することで、HLS での配信ができます。 **こちらのドキュメントは古いため参考程度にお願いします** :doc:`HLS 配信 ` をご確認ください。 実際に Sora を利用した HLS での配信サービスをさくらインターネット様が提供されていますのでこちらの利用をおすすめします。 `ライブ配信サービス ImageFlux Live Streaming|さくらインターネット `_ 追いかけ再生はできますか? --------------------------- Sora 単体ではできません。 ただし、Sora の :doc:`RTP 転送 API ` を利用して FFmpeg などに転送することで、HLS での配信ができます。 そのため、この HLS での配信を利用することで追いかけ再生を実現できます。 **こちらのドキュメントは古いため参考程度にお願いします** :doc:`HLS 配信 ` をご確認ください。 WebRTC 確立するまでにかかる時間は知ることができますか? ----------------------------------------------------------------- :ref:`20171010.GetStatsReport` API の ``average_setup_time_msec`` でシグナリング接続開始から WebRTC 接続が確立するまでにかかった平均時間が取得できます。 性能 ==== 負荷試験はどう行えばよいですか? ----------------------------------- サポートの範囲外になりますが、Sora 専用の負荷試験ツールをオープンソースとして公開しています。 `WebRTC Load Testing Tool Zakuro `_ Sora は CPU をどの程度使用しますか? ------------------------------------ .. important:: WebRTC ではすべての通信が暗号化されているため、暗号化/復号処理で最も CPU リソースを消費します 通信環境やビットレートに影響するため一概には言えませんが、参考値を紹介します。 環境は AWS の C5n.4xlarge を利用しています。 以下の CPU の % は 1 コアを 100% とした場合です。 解像度が QVGA / 20fps / 1000kbps の映像と音声の送受信で 1 チャネル 8 クライアントを 12 ルーム (96 接続) で CPU 使用率を 200 % 程度利用します。 Sora はメモリをどの程度使用しますか? ------------------------------------- Sora は再送のキャッシュ用途にメモリを使用します。 100 接続であれば 4 GB 以上あれば十分です。 また、録画利用時にはフレーム組み立てのため一時的にメモリを使用します。こちらはビットレートに依存します。 Sora はディスクをどの程度使用しますか? --------------------------------------- 主に録画したファイルとログによりディスクが使用されます。 録画する映像の容量はコーデックやビットレートに依存するため一概には言えません。 マルチストリームは 1 チャネルで最大何クライアントまで対応していますか? ------------------------------------------------------------------------------ |sora_version| 時点で最大 12 クライアントまで対応しています。それ以上を接続することもできますが、お勧めはできません。 もし、大規模での会議を行いたい場合は、現在実験的機能として提供中の :doc:`スポットライト機能 ` の利用を検討してください。 運用 ==== 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. `_ Sora をデーモン化せずに起動することはできますか? -------------------------------------------------- できます。 Sora を起動する際、 ``bin/sora foreground`` で起動してください。 Sora を systemd で利用することはできますか? ----------------------------------------------- できます。 詳細は :doc:`systemd ` をご確認ください。 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.conf`` の設定 :ref:`sora_conf-websocket_signaling_ping_interval` と :ref:`sora_conf-websocket_signaling_pong_timeout` で変更できます。 Sora の DataChannel を利用したシグナリングの Sora 側からの切断条件は何ですか? ------------------------------------------------------------------------------ Sora は定期的に接続状態を確認する仕組みを持っており、その仕組みで切断かどうかを判断しています。 詳細は :doc:`ICE コネクションステート ` をご確認ください。 Sora 1 台のサーバーでは最大同時接続数はいくつですか? -------------------------------------------------------- 現状 1 台では 5000 接続までを推奨しています。 多くの接続を 1 台で行いたい場合、まずはサポートまでご相談ください。 Sora が対応している OS は何ですか? ----------------------------------- |sora_version| の時点では以下の 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 .. important:: arm64 版は 3 ヶ月以上、 200 同時接続以上のライセンスをご契約頂いているお客様にのみ提供しています。 Sora は Amazon Linux に対応していますか? ----------------------------------------- 対応していません。 Sora が対応していると明記している OS 以外で動作させている場合は Sora はサポート対象外となります。 Sora のプロセス名は何になりますか? ----------------------------------- ``bin/sora daemon`` で起動した場合、Sora 本体は run_erl というプロセスになります。こちらの死活監視をお願いします。 Sora を終了しても epmd というプロセスが残りますが問題ありませんか? ------------------------------------------------------------------- 問題ありません。 Sora と関係するプロセスですが独立しており、起動し続けていて構いません。 カーネルパラメーターの設定は何をすれば良いですか? ------------------------------------------------------- まずはファイルディスクリプタ数をご確認ください。値は 65535 に設定しておくことをお勧めします。 その他のチューニング項目については :doc:`Linux カーネルチューニング ` をご確認ください。 ログローテーションはどうすれば良いですか? ------------------------------------------ sora.jsonl と connection.jsonl はローテションされませんので必要な部分で mv コマンドなどで移動してください。 ファイルが無い場合、新しく作られます。 erlang.log については自動でログローテーションを行いますので気にする必要はありません。 ログの詳細については :doc:`ログファイル ` をご確認ください。 ログのタイムゾーンを教えてください ------------------------------------------ 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 `_ - `linux - Configuring SELINUX to allow logging to a file that's outside /var/log - Unix & Linux Stack Exchange `_ 映像が乱れたり止まったりする場合は何を確認するのが良いですか? ---------------------------------------------------------------- 映像が乱れたり止まったりする場合はネットワーク回線が不安定なことがほとんどです。 この場合は切断時に生成される ``connection.jsonl`` を確認してみてください。 このログで映像の送信側と受信側の統計情報が確認できますので、 映像が乱れたり止まったりした接続の ``connection_id`` を記録しておいて下さい。 - total_received_rtcp_rtpfb_generic_nack - total_sent_rtcp_rtpfb_generic_nack この値が多ければ多いほど「再送要求」の回数が多く、回線が不安定だったことが把握できます。 ``connection.jsonl`` の詳細については :ref:`connection_log` をご確認ください。 Sora が突然終了しました ----------------------------------------------------------------- Sora は何か問題があり Sora が終了した場合 ``erl_crash.dump`` というログを出力します。 このログが出力された場合はサポート問い合わせの手順に従ってサポートまでご連絡ください。 もし ``erl_crash.dump`` が出力されずに Sora が終了した場合はカーネル側から停止された可能性があります。 まずは OOM Killer で殺されていないかどうかを確認してみてください。 Sora で利用している Erlang VM のフラグを指定することはできますか? -------------------------------------------------------------------------------------- .. important:: この設定を利用する場合はサポートまでお問い合わせください できます。環境変数 ``SORA_ADDITIONAL_ERL_ARGS`` を利用してください。 SDK === Sora の SDK は基本的にシグナリング処理のための SDK です。 WebRTC 部分は `webrtc.org ` が提供しているライブラリを利用しています。 Sora の SDK へのサポートはありますか? ---------------------------------------------- Sora の SDK サポートは提供していません。また有償のサポートも提供していません。 もしアドバイスが必要だったり、問題が起きたりした場合は Discord へお願いします。バグ対応は最優先で行います。 Discord サーバーの招待 URL ------------------------------ https://discord.gg/shiguredo 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 に関しては以下をご確認ください。 - `Sora JavaScript SDK ドキュメント — Sora JavaScript SDK `_ - `WebRTC SFU Sora JavaScript SDK `_ iOS SDK はありますか? ---------------------- Sora の iOS SDK に関しては以下をご確認ください。 Swift で書かれています。 - `Sora iOS SDK ドキュメント — Sora iOS SDK `_ - `WebRTC SFU Sora iOS SDK `_ - `WebRTC SFU Sora iOS SDK クイックスタート `_ - `WebRTC SFU Sora iOS SDK サンプル集 `_ Android SDK はありますか? -------------------------- Sora の Android SDK に関しては以下をご確認ください。 Kotlin で書かれています。 - `Sora Android SDK ドキュメント — Sora Android SDK `_ - `WebRTC SFU Sora Android SDK `_ - `WebRTC SFU Sora Android SDK クイックスタート `_ - `WebRTC SFU Sora Android SDK サンプルアプリケーション `_ C++ SDK はありますか? ------------------------ Sora の C++ SDK に関しては以下をご確認ください。 C++ で書かれています。 - `WebRTC SFU Sora C++ SDK `_ Unity SDK はありますか? ------------------------ Sora の Unity SDK に関しては以下をご確認ください。 C++ SDK をベースにしています。 - `Sora Unity SDK ドキュメント — ora Unity SDK ドキュメント `_ - `WebRTC SFU Sora Unity SDK `_ - `WebRTC SFU Sora Unity SDK サンプル集 `_ Python SDK はありますか? ------------------------------------ Sora の Python SDK に関しては以下をご確認ください。 C++ SDK をベースにしています。 - `Sora Python SDK ドキュメント — Sora Python SDK `_ - `WebRTC SFU Sora Python 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 を公開しています。 - `WebRTC Native Client Momo `_ - `shiguredo/momo: WebRTC Native Client Momo `_ ライセンス ========== 同時接続とは具体的に何を指していますか? ---------------------------------------- シグナリングの同時接続数を指しています。1 シグナリング接続で 1 同時接続です。 ライセンスの同時接続数を超えた時はどうなりますか? ------------------------------------------------------- もし、最大同時 100 接続のライセンスファイルを利用している場合で 101 本目の接続がきた場合、 Sora は 101 本目の接続を拒否します。 ライセンスの同時接続数の最小の値はいくつですか? ------------------------------------------------------- ライセンスの同時接続数の最小は 100 となります。 10 や 50 といったライセンスは提供しておりません。 ライセンスの同時接続数は 100 単位ですか? ------------------------------------------------------ はい、その通りです。100 の次は 200 となり、100 同時接続単位となります。 110 や 150 といったライセンスは提供おりません。 ライセンスの期限を過ぎた場合はどうなりますか? ---------------------------------------------- 動作上、既存の接続に対しては特に何もありませんが、新規の接続を受け付けなくなります。 Sora の現在の同時接続数を確認する方法はありますか? --------------------------------------------------- :ref:`20171010.GetStatsReport` API の ``total_ongoing_connections`` で現在 Sora に接続している同時接続数が確認できます。 ライセンス期限のタイムゾーンを教えてください ------------------------------------------------ UTC です。 クラスター利用時に同一のライセンスを利用する方法はありますか? ------------------------------------------------------------------- あります。 ``最大ノード数ライセンス`` を契約することで、 1 つのクラスター構築時に同一のライセンスを利用できるようになります。 ``最大ノード数ライセンス`` では、 1 クラスターで同一のライセンスを最大いくつのノードに適用できるかがあらかじめ定義されています。 クラスターを構築する際に、その最大ノード数までは同一ライセンスを利用できます。 詳細は :ref:`max_nodes_license` をご確認ください。 最大ノード数ライセンスで契約できる最大ノード数はいくつですか? -------------------------------------------------------------------- 最大ノード数は 10 を想定しています。 アップデート ================ アップデートは有償ですか? -------------------------------------- ライセンスをご契約いただいている期間は、無償でアップデートを提供させていただきます。 アップデートのタイミングは決まっていますか? ------------------------------------------------ 原則として毎年 6 月と 12 月に、機能の追加や改善、削除を目的としたアップデートを行います。 その他、必要に合わせて不定期に修正のアップデートを行うことがあります。 詳細は :doc:`サポートライフサイクル ` をご確認ください。 Sora のバージョン表記 ---------------------- バージョン表記:: YYYY.MAJOR.FIX - ``YYYY`` はリリースした年を示します - ``MAJOR`` はその年のメジャーアップデートのリリース回数を示します - ``FIX`` はバグフィックスアップデートおよびホットフィックスアップデートのリリース回数を示します 詳細は :doc:`サポートライフサイクル ` をご確認ください。 サポート ======== 古いバージョンの Sora のサポートは提供していますか? ---------------------------------------------------- 以前は最新バージョンの利用に対してのみサポートを提供していましたが、Sora 2023.1.0 以降はサポート提供期間を約 12 ヶ月間に変更しました。 詳細は :doc:`サポートライフサイクル ` をご確認ください。 Sora のサポートは電話で受け付けていますか? ------------------------------------------- いいえ。サポートはサポート専用のメールでのみ、受け付けています。 Sora のサポートは 24 時間 365 日ですか? ---------------------------------------------------- いいえ。サポートは弊社営業日の 10:00-17:00 のみ、対応しています。 SDK の有償サポートは受け付けていますか? ---------------------------------------- いいえ。Sora SDK の有償サポートは行っていません。 ただし GitHub 上ですべてのコードを公開しています。 もし何か問題が起きた場合は時雨堂コミュニティの Discord にてご相談ください。 バグ対応は最優先で行います。 https://discord.gg/shiguredo Zakuro や Hisui など関連ツールの有償サポートは受け付けていますか? ------------------------------------------------------------------- いいえ。関連ツールの有償サポートは行っていません。 ただし GitHub 上ですべてのコードを公開しています。 もし何か問題が起きた場合は時雨堂コミュニティの Discord にてご相談ください。 バグ対応は最優先で行います。 https://discord.gg/shiguredo