質問と答え

ここでは WebRTC SFU Sora に関する質問と答えを公開しています。

こちらに掲載されていない質問につきましては sora at shiguredo.jp にお願いいたします。

WebRTC 全般

片方向配信はサポートしていますか?

対応しています。2018 年 05 月時点で 1 台のサーバで最大 300 クライアントまで配信可能です。

300 クライアント以上の配信を行いたい場合は sora at shiguredo.jp またはサポートまでお問い合わせ下さい。

双方向配信はサポートしていますか?

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

2018 年 05 月の時点で 1 チャンネルでの同時配信クライアントは 12 まで可能としています。

音声検出による映像の切り替えはサポートしていますか?

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

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

詳細は スポットライト機能 をご確認ください

スクリーンシェア機能には対応していますか?

2018 年 05 月の時点でスクリーンシェア機能は Firefox と Chrome と Edge が対応しています。 getUserMedia の引数にスクリーンシェア用の引数を渡すことで使用可能になります。

ただし Chrome であれば、 Chrome 拡張が必要になります。

Firefox であれば、カメラと同様に使用可能です。

Firefox で画面共有 - Qiita

Sora としては getUserMedia でカメラを使用した場合の動作と変わらないため、 Sora では問題なく使用できます。

Edge については Media Capture API を利用しているため、また別の仕組みが必要となります。

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

はい。 Chrome と Firefox と Safari は対応しています。Edge は 2018 年 05 月の時点では非対応です。 ただ 2018 年 05 月の時点では Chrome と Firefox と Safari のマルチストリームの仕様が異なるためクライアントの実装側でブラウザ判定を行う必要があります。

ただ Sora JavaScript SDK を使用することで、面倒な吸収をせずに使用可能です。

複数の映像をマルチストリームを利用して送ることは可能ですか?

いいえ。クライアントから動的に複数の配信ストリームを追加することはできません。

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

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

2018 年 05 月の時点では ...

  • Chrome M67 は VP8, VP9, H.264 に対応しています
  • Firefox 60 は VP8, VP9, H.264 に対応しています
  • Edge (Windows 10 1803) は VP8, H.264 に対応しています
  • Safari 11.1 は H.264 のみに対応しています
    • VP8 や VP9 には対応していません

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

詳細は シグナリング をご確認ください

Chrome では HTTPS が必須なのですか?

はい。Chrome M47 から、ローカルホスト以外からのアクセスで getUserMedia を使用する場合は HTTPS が必須になりました。

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

http でのアクセスでカメラの映像を取得する - Qiita

Safari では HTTPS が必須なのですか?

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

IE は WebRTC に対応していますか?

IE は WebRTC に対応する予定はありません。

また Sora は IE で WebRTC を実現するプラグインでの動作について確認しておりません。

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

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

詳細は Apple Safari の WebRTC について をご確認ください。

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

はい、 Edge はWebRTC 1.0 に対応しています。

詳細は Microsoft Edge の WebRTC について をご確認ください。

クライアント毎にコーデックやビットレートを指定できますか?

可能です。 Sora から投げる Offer に含める SDP をクライアント毎に変更することが可能です。

詳細については audio と video パラメータ上書き機能 をご確認ください。

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

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

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

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

シグナリング

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

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

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

シグナリングの詳細な仕様につきましては シグナリング ご覧ください。

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

Chrome では getUserMedia を使用する場合、 ローカルホスト以外のアクセスは WSS を必須としています。 ただし、Sora は WS のみに対応しています。これは、実運用を考慮して、前段にリバースプロキシサーバを立てていることを前提としており、リバースプロキシサーバで TLS を終端する構成を想定しているためです。 そのため、もし WSS をご使用になる場合は、 Nginx などのリバースプロキシサーバを使用して TLS の終端を行ってください。弊社では Nginx の使用を推奨しております。

詳細については Nginx をご確認ください。

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

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

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

シグナリングの WebSocket を使ってクライアントにメッセージ送ることは可能ですか?

可能です。 プッシュ API を使用してください。

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

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

シグナリング通知 をご確認ください。

認証

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

可能です。ただし、Sora は認証機能を持っていません。 Sora のシグナリング開始時にアクセストークン(任意の文字列)をクライアントに送ることができます。これは外部のアプリケーションサーバ側で払い出して使用することができます。

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

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

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

詳細は 認証ウェブフック をご確認ください

API

指定したユーザのみを切断することは可能ですか?

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

録画

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

WebM 形式で録画されます。

録画した WebM 形式ファイルはブラウザで閲覧可能ですか?

可能です。Chrome と Firefox で閲覧することができます。

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

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

音声のみを録音可能ですか?

可能です。Opus コーデックと PCMU コーデックのどちらかで音声のみの録音が可能になります。

重要

PCMU コーデックはプレビュー版として提供しています

  • Opus コーデックの場合は webm ファイルで出力されます
  • PCMU コーデックの場合は wav ファイルで出力されます

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

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

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

TURN

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

Sora は TURN 機能を組み込んであります。そのため、TURN-UDP のポート番号を固定したい場合以外は別途 TURN サーバを立てる必要がなくなりました。 ただし TURN-TLS 機能を使用するためには Nginx が必要となります。

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

詳細は TURN 機能 をご確認ください

HTTP や HTTPS で利用される 80 番や 443 番のポートを TURN 機能で利用することは出来ますか?

Nginx が必須になりますが、可能です。詳細は TURN-TCP で 80 番ポート、TURN-TLS で 443 ポートを利用する をご確認ください。

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

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

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

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

認証時のクライアントへの metadata の払い出しについての詳細は metadata の払い出し をご確認ください

TURN IPv6 に対応していますか?

対応しています。

ウェブフック

ウェブフックの通知先は複数登録することができますか?

できません。もし複数の通知先を指定したい場合は通知先のアプリケーションサーバなどで対応をお願いします。

OpenResty を使用して通知されてきた JSON を Lua で判断し通知先をディスパッチする事をお勧めします。

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

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

その他

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

できません。もしクライアント毎に IP アドレスを変更したい場合は認証時の戻り値を使用してください。

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

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

詳細につきましては 視聴メディアの選択 をご確認ください。

複数のユーザのうち、メインで発言している人など、音声のボリュームが一定以上のユーザのみの映像を配信することは可能ですか?

Sora 18.02 にて音声検出による映像の動的表示機能をプレビュー機能として搭載しました。

実際の動作については動画を御覧ください。

スポットライト機能

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

2018 年 05 月時点では対応しておりません。 ただし、チャネルを二つ使用することで擬似的なサイマルキャストを実現することが可能になります。

クラスター機能はありますか?

2018 年 05 月時点では対応しておりません。 Sora は現在のところ単独のサーバとして動作する仕組みしか持ち合わせておりません。

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

プレビュー版ですが StartRtpForwarding / StopRtpForwarding API という機能を使用することで、外部のサーバに対して WebRTC の DTLS (暗号部分) を除いた RTP パケットを送ることが可能です。

FFmpeg などを使用することで、 RTP から HLS や MPEG-DASH などに変換することもできるようです。将来的にはこの API と FFmpeg を連携するための情報を公開できればと考えています。

HLS 出力はできますか?

Sora 単体ではできません。ただし Sora の RTP 転送 API を利用し、FFmpeg に転送することで HLS 配信することは可能です。

性能

Sora は CPU はどの程度使用しますか?

重要

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

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

環境はさくら VPS の 4 コア 4G のサーバを使用しています。

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

  • 320x240 / 15fps / 100kbps の映像と音声の 1:1 配信で約 2-4 % 程度の CPU 使用率です
    • 1:0 で約 2-3% の CPU 使用率
    • 1:5 で約 4-6% の CPU 使用率
    • 1:15 で約 17-24% の CPU 使用率
    • 1:30 で約 22-32% の CPU 使用率
      • PC 2 台で 15 接続ずつの検証です
  • 640x480 / 30fps / 800kbps の映像と音声の 1:1 配信で約 4-6 % 程度の CPU 使用率です
    • 1:0 で約 3-4% の CPU 使用率
    • 1:5 で約 8-11% の CPU 使用率

また、再送制御を実現している Generic NACK という機能が頻繁に使われるようになると CPU リソースを消費します。 そのため回線が不安定になると、 CPU 使用率が高くなります。

Sora はメモリはどの程度使用しますか?

Sora はメモリをあまり使用しません。 100 接続で 2 GB あれば十分です。

ただしキャッシュ容量を多くする場合は調整する必要があります。その場合はお問い合わせください。

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

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

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

マルチストリームは最大何ユーザまで対応していますか?

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

もし大規模での会議を行いたい場合は現在プレビュー機能として提供中の スポットライト機能 をご検討ください。

運用

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

現状 1 台では 300 とさせていただいていますが、サーバのスペックが高ければ 1 台で 1000 同時接続なども可能です。

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

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

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

  • x86_64
    • Ubuntu 18.04
    • Ubuntu 16.04
    • CentOS 7.4
    • CentOS 6.9
  • ARM64
    • Ubuntu 18.04
    • Ubuntu 16.04

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

Sora 本体は beam.smp というプロセスになります。こちらの死活監視をお願いします。

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

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

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

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

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

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

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

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

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 の範囲を指定してください。

ARM64 パッケージの OS は Ubuntu のみの対応ですか?

はい。Ubuntu 18.04 または 16.04 に対応しております。

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

はい、 Chrome と Firefox で可能です。

  • Chrome であれば URL に chrome://webrtc-internals を入力してみてください
  • Firefox であれば URL に about:webrtc を入力してみてください

Edge や Safari には今のところ詳細をみる機能はありません

SDK

Sora の SDK は基本的にシグナリング処理のための SDK です。 WebRTC 部分は webrtc.org にあるライブラリを使用することで対応可能です。

JavaScript SDK はありますか?

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

iOS SDK はありますか?

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

Android SDK はありますか?

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

React Native SDK はありますか?

SDK の提供は難しいため、現在のところ SDK を提供する予定はありません。

ただ React Native で利用可能な WebRTC ライブラリを提供予定です。

更新できていないサンプルは以下をご覧ください。

shiguredo/sora-react-native-demos

ライセンス

接続数を超えた時はどうなりますか?

もし、100 接続のライセンスをご購入いただいていて 101 本目の接続がきた場合、 Sora は 101 本目の接続を拒否します。

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

新規の接続を受け付けなくなります。

バージョンアップ

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

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

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

特に決まっておりません。少なくても 2 ヶ月に 1 回はアップデート版の提供を行います。

サポート

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

受け付けておりません。サポートは全てサポート専用メールアドレスにて承っております。

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

いいえ。Sora のサポートは営業日の 10:00-17:00 のみ受け付けています。

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

Sora SDK の有償サポートは予定しておりません。

ただし GitHub 上ですべてのコードを公開しております、もし何か問題が起きた場合は GitHub Issues に課題をあげてください。