時雨堂が開発/販売している WebRTC SFU Sora (以降 Sora) の最新版 2023.2.0 を 2023 年 12 月 20 日にリリースしました。
- セッション単位録画機能
- 録画ブロック機能
- 配信ワーカー機能
- クラスター互換性維持強化
- OBS WHIP 機能強化
- 転送フィルター機能強化
- セッション更新ウェブフック
- ウェブフック IPv6 対応
- データチャネルチェックサム省略機能
- H.265 サイマルキャスト機能
今回は録画機能、配信機能、クラスター機能を強化しています。また、いくつかの実験的機能を正式版としました。
正式版リリース
セッションウェブフックを正式版としてリリースしました。Sora では、あるチャネルに対して少なくとも 1 つの接続が存在している状態をセッションと表しています。あるチャネルに対して誰かが接続するとセッションが生成され、そのチャネルの接続数が 0 になってから一定期間経過するとそのセッションは破棄されます。
セッションウェブフックは、このセッションの状態をアプリケーション側で把握できるようにするためのウェブフックです。
例えばこのセッションウェブフックと後述するセッション単位の録画機能とを組み合わせることで、セッション生成ウェブフックの戻り値に “recording”: true を払い出すだけで録画を開始できるようになります。
これまでのように誰かが初めてチャネルに接続してきたタイミングで録画 API を叩くといった必要はありません。
メッセージング機能 を正式版としてリリースしました。WebRTC にはその機能の一つとしてデータチャネルがあり、これにより音声や映像だけでなく、リアルタイムにデータの送受信を行うことができます。
Sora のメッセージング機能はデータチャネルと互換性を持たせつつ、メッセージの送受信、受信のみ、送信のみと 3 種類のタイプを選べたり、メッセージの圧縮をしたりといった独自の仕様を追加して提供しています。
データチャネル経由のシグナリング を正式版としてリリースしました。一般的によく使われているウェブソケットを利用したシグナリングでは、クライアントと Sora の通信が切断された際に早く気付けるという強みがある一方で、不安定な回線ではパケットが詰まりやすく、通信が終了してしまう可能性があります。
データチャネルを利用したシグナリングでは、クライアントと Sora の通信が切断された際にすぐ気付くことはできないものの、シグナリングやその他のデータを並列で運搬できるため、パケットが詰まることなくより安定した接続が維持できます。
Sora のシグナリングでは、設定によって最初だけウェブソケットを利用し、その後はデータチャネルに切り替えることが可能なため、高い安定性を重視するユーザーにも対応できるようになっています。
セッション単位の録画機能
セッション単位の録画では、事前の録画予約などを行う必要がなく、そのチャネルで新しいセッションが生成されたタイミングで録画を開始することができます。
今までは事前に、もしくはイベントウェブフックが送られてきたタイミングで録画開始 API を叩く必要がありましたが、この新しい録画機能では、セッション生成ウェブフックの戻り値に “recording”: true を払い出すだけで録画を開始できるようになります。
また、セッションが破棄されたタイミングで録画を終了するため、従来の録画機能とは異なり、録画の停止を忘れるということもありません。
今までの録画の良いところを維持しつつ、より便利な仕組みを追加しています。
録画ブロック機能
今までの録画機能ではチャネルに参加している全てのクライアントの録画を行う必要がありました。今回のセッション単位の新しい録画機能では、クライアント単位で録画をブロックできる機能を追加しました。
認証成功時に “recording_block: true を払い出すことで、そのクライアントに対しては録画が行われなくなります。
この機能を利用することで、例えば録画の同意が取れなかったユーザーでもそのチャネルに参加させられるようになります。
配信ワーカー機能
Sora で片方向配信を行う場合、 1 チャネルで 1080p (6 Mbps) の画質の映像を配信をすると、最大で 500 接続 (3 Gbps) 程度が限界でした。
今回、 Sora の内部に複数の配信ワーカーを用意する仕組み追加することで 1,500 同時接続 (9 Gbps) が実現できるようになりました。
イメージとしては、これまでは Sora の内部で 1 ワーカーが配信を頑張っていたのを、ワーカーを複数に増やして、それぞれのワーカーが並列で配信するといったイメージです。
同時接続 1,500 は現時点で検証済みの値ですが、今後もより増やしていけたらと思います。ただし CPU やネットワークのリソースを考えると、1080p のような高ビットレートの利用では多くても 1 SFU で 10,000 接続程度が現実的だと考えています。
10,000 以上の接続に対しては後述するクラスターリレー機能を利用して実現する予定です。
クラスター互換性維持機能
Sora クラスターのメジャーアップデートをする際に、クラスター機能を停止することなくアップデートできる仕組みを提供します。
この機能を利用すると、クラスターに参加している全てのノードが最新バージョンになったタイミングで、クラスターのバージョンも最新にアップデートされるようになります。
クラスターを止めることなく最新バージョンへのアップデートが可能になるため、クラスターのバージョンアップのためにサービスを停止する必要がなくなります。
ただし、この機能は1つ前のメジャーバージョンからのローリングアップデートのみ可能です。2 つ前からの場合は 1 つずつ上げて行く必要があります。
OBS WHIP 機能強化
OBS 側で、 User-Agent ヘッダーに OBS のバージョンが含まれるようになりました。この機能に対応し、認証ウェブフックの sora_client に OBS のバージョンを含めるようにしました。これで、クライアントがどの OBS のバージョンを利用しているかを把握できるようになります。
また、 OBS の AV1 への対応を行いました。将来的に OBS が AV1 に対応した際に動作するように仕込んであります。さらに OBS が検討している WHIP でのサイマルキャストへの対応も進めていく予定です。
転送フィルター機能強化
Sora は配信者から送られてきた音声や映像をどのクライアントにどのように転送するかを判断するフィルター機能を持っています。この機能を利用することで、視聴者が許可してから映像を出す、特定の視聴者の映像のみを配信するなど、細かな制御が可能になります。
今回転送フィルターを設定する際、バージョンとメタデータを追加できるようにしました。
バージョンは、異なる条件の転送フィルターを同時に適用することを防ぐための仕組みです。
新しい転送フィルターに更新する場合は、どのフィルターを更新しようとしているのかを明確にするために更新対象のバージョンを指定する必要があります。
この更新対象のバージョンが、現在適用されている転送フィルターのバージョンと異なる場合、更新は失敗します。
この仕組みにより、意図しない転送フィルターが適用されることがなくなるため、より気軽に転送フィルターを使えるようになります。
メタデータは、なぜこのフィルターを指定しているのか、どのタイミングで削除するのかなど、そのフィルターに対して好きなように情報を付与できます。
今まで「なぜフィルターをしているのか」を記録できなかった問題を解決しています。
セッション更新ウェブフック
今回の Sora で、セッションの情報を一定間隔で送信するセッション更新ウェブフックを追加しました。
今まではセッションの生成と破棄のタイミングでのみウェブフックを送信していましたが、それだと障害発生時にセッション破棄のウェブフックが送信できなかった場合、アプリケーションサーバー側にセッションが残り続けてしまいます。
それを回避するために一定間隔でウェブフックを送り、障害が発生した場合でも、一定時間が過ぎてもセッションが更新されなければ、そのセッションを破棄できるようになります。
ウェブフック IPv6 対応
昨今の IPv4 枯渇問題を解決するために、IPv6 のみのアプリケーションサーバーにもウェブフックを送信できるようになりました。
データチャネルチェックサム省略機能
データチャネルで利用している SCTP というプロトコルでは CRC32c という少し特殊な仕組みでチェックサムを実現しています。データチャネルの SCTP は DTLS 上で送られ、 DTLS 以上の保証を提供していないため、チェックサムの計算自体に意味がありません。この無駄を減らすために SCTP の拡張機能を利用することで、チェックサムを計算せず、チェックサムの値として 0 を入れることを許容する仕組みが現在 RFC ドラフトで検討されています。この仕組みは、Chrome など主要ブラウザに利用されている libwebrtc にも入る予定です。
チェックサムの計算は暗号処理の次に CPU 負荷が高いため、できるだけ回避したいと考えていたこともあり、今回この機能に対応した仕組みを追加しました。
libwebrtc ではまだ実現できないため、 OBS などで利用されている libdatachannel 側に対応の PR を追加し、さらに usrsctp にも PR を行い、Sora の動作確認を行っています。
H.265 サイマルキャスト
Sora では iOS / Android SDK による H.265 コーデックの対応を進めており、2024 年前半でのリリースを予定しています。それに伴い Sora では H.265 サイマルキャストの対応を行いました。
これで、既存の全てのコーデックでサイマルキャストが利用できるようになりました。
次回リリース
Sora は通常 1 年に 2 回、6 月と 12 月にメジャーアップデートを行っていますが、来年は少しイレギュラーで、 2024 年 4 月頃にメジャーアップデートとして Sora 2023.3.0 を提供予定です。こちらはクラスター機能を利用しているお客様向けとなる想定です。
Sora 2023.3.0 ではクラスターリレー機能を追加して提供を行います。クラスターリレー機能は Sora クラスターの利用時に、どのノードに繫いでも同一チャネルにアクセスできるようになる機能です。
今まで Sora のクラスター機能は 1 チャネル 1 ノードという制約がありましたが、クラスターリレー機能を導入することで、この制約がなくなります。
また、クラスターリレー機能によりどのノードに繋いでも同一チャネルの配信が視聴できるようになり、片方向配信でのスケールアウトも可能になるため、大規模配信も実現できるようになります。
2024 年 6 月には従来どおりメジャーアップデートである 2024.1.0 を提供予定です。