時雨堂 2023–09 ニュースレター

2023 年 9月

V
shiguredo
17 min readSep 27, 2023

--

時雨堂製品のアップデート情報を不定期でお届けします。気になることがあればお気軽にメールにてお問い合わせください。メールアドレスは https://sora.shiguredo.jp/ に掲載しています。

WebRTC SFU Sora

https://sora.shiguredo.jp/

2023 年 12 月リリース予定の Sora 2023.2.0 に向けて開発を進めています。

  • 配信ワーカー機能
  • クラスターリレー機能
  • クラスター互換性維持機能
  • OBS WHIP 機能強化
  • セッション単位録画機能
  • 転送フィルター機能強化

いくつか大きめの機能追加が入ります。特にクラスター周りの機能を強化しています。

配信ワーカー機能

Sora で片方向配信を行う場合、 1 チャネルで 1080p (6 Mbps) の画質の映像を配信をすると、最大で 500 接続 (3 Gbps) 程度が限界でした。

今回、 Sora の内部に複数の配信ワーカーを用意することで 1,500 同時接続 (9 Gbps) が実現できるようになりました。イメージとしては、これまでは Sora の内部で 1 ワーカーが配信を頑張っていたのを、ワーカーを複数に増やして、それぞれのワーカーが並列で配信するといったイメージです。同時接続 1,500 は現時点で検証済みの値ですが、今後もより増やして行けたらと思います。ただし CPU やネットワークのリソースを考えると、多くても 1 サーバーで 10,000 接続程度が現実的だと考えています。

クラスターリレー機能

今までの Sora のクラスターでは 1 チャネル 1 ノードの制約がありましたが、今回追加するクラスターリレー機能によって 1 チャネルに複数ノードから接続できるようになります。

この機能により、1 ノード の同時接続数がライセンスやマシン性能の限界に来た場合でも、他のノードに接続できるようになるため、どのサーバーに割り当てるかというチャネル管理が不要になります。サーバーさえ用意できれば容易にスケールアウトが可能です。

また、片方向配信での大規模配信も実現できるようになります。ノード数は最大で 100 程度までは想定しているため、1 ノードで最大 10,000 同時接続とすると、 1 チャネルで最大 100 万同時接続も可能になります。

クラスター互換性維持機能

Sora クラスターのメジャーアップデートをする際に、クラスター機能を停止することなくアップデートできる仕組みを準備中です。

この機能を利用することで、クラスターに参加している全てのノードが最新バージョンになったタイミングで、クラスターのバージョンも最新にアップデートされるようになります。

この機能を利用することで「クラスターを止めることなく、最新バージョンへのアップデート」が可能になるため、クラスターのバージョンアップでサービスを止める必要がなくなります。

ただし、この機能は1つ前のメジャーバージョンからのローリングアップデートのみ可能です。

OBS WHIP 機能強化

OBS 側で入った User-Agent ヘッダーに OBS のバージョンが含まれる機能に対応することで、認証ウェブフックの sora_client に OBS のバージョンを含めるようにしました。これで、クライアントがどの OBS のバージョンを利用してるかを把握できるようになります。

また、 OBS の AV1 への対応を行いました。将来的に OBS が AV1 に対応した際に動作するように仕込んであります。さらに OBS が検討している WHIP でのサイマルキャストへの対応も進めていく予定です。

セッション単位録画機能

今までの録画は「セッション」という概念がありませんでしたが、セッションが終了したタイミングで録画も終了する、セッション単位の録画機能を追加します。既存の録画機能の上位互換として提供予定です。

録画機能は 2016 年に提供したインターフェースを維持してきましたが、セッションやクラスターといった機能が入ったのに合わせて、今回インターフェースの変更と仕組み自体をモダンに切り替えることにしました。

今まで録画予約という概念で「事前に録画予約」をしてもらっていましたが、今後はセッションウェブフックの戻り値で recording: true を渡してもらうだけで録画が開始されるようになります。

転送フィルター機能強化

マニアックな機能なので多くは使われていませんが、 Sora では SFU の特長である映像や音声の転送に対してフィルターを設定してコントロールできる機能があります。この機能により、特定のユーザーに対してのみ音声や映像を転送する、逆に特定のユーザーのみ転送しない、といった設定が可能です。

今回はこの機能に録画もコントロールできる仕組みを追加します。つまり特定のユーザーだけ録画する、特定のユーザーだけ録画しないといったことが可能になります。

また、フィルターの設定を更新する際は、必ず更新前のバージョンをチェックすることで、同時に複数の異なる変更が実行された場合でも「後勝ち」になることなく、期待したフィルターが確実に反映できるようにしています。

WebRTC 自体はすでに 10 年以上経過し、もう枯れている技術の仲間入りといっても違和感はありません。今後 Sora はスケールアウト、スケールアップの両方の面で改善を進めていきます。

Sora Cloud

https://sora-cloud.shiguredo.jp/

2022 年 12 月から提供している Sora Cloud ですが、色々と改善を進めています。特に自社製品 OSS ツールのクラウド化に力を入れています。

録画一覧

現在/過去の録画一覧を追加しました。また、今後はセッション一覧から録画を実行できるようにする予定です。

Hisui Cloud

録画合成機能をクラウドとして提供する Hisui Cloud を提供を始めています。現時点ではアルファ版ということもあり無料で提供中です。

現時点では合成のレイアウトは固定かつ、出力形式も 2 つのみですが、今後はレイアウトを指定できるようにしたり、出力形式も AV1/Opus へ対応したりしていきます。最終的にはレイアウトエディターまで提供できればと思います。

Kohaku Cloud

Kohaku のクラウド版として、クライアントの統計情報を確認できる仕組みを提供予定です。

課金モデルは検討中ですが、できるだけ安く提供したいと考えています。

Suzu Cloud

Suzu のクラウド版として、AWS や GCP の Speech to Text サービスに接続できる仕組みを追加予定です。AWS や GCP のキーを設定するだけで簡単に利用できるようにする予定です。

課金モデルは検討中ですが、できるだけ安く提供したいと考えています。

ログ保存期間増加

今まで 7 日間だったログ保存を 30 日間に延長します。

API / ウェブフック回数増加

基本料金に含める API や ウェブフックの回数を 100 万回から 1000 万回までに増やします。それ以降は 1000 万回毎に 5,000 円となります。

Sora Cloud は転送量や利用時間で課金しないというマニアックな方針をとってるサービスということもあり、多くの顧客を抱えるサービスではありませんが、今後は片方向配信でも気軽に利用して頂けるようなプランも提供できればと思います。

Sora CLI

現在開発中です。

Sora の API を叩いたり、ログを確認したり、ウェブフックのテストをしたり、ログをアップロードしたりするための Sora CLI を開発中です。Apache-2.0 にて OSS として公開予定です。

ウェブフックは ngrok を内蔵してみようと思ったりしています。

$ sora api StartRecording --channel-id sora
$ sora webhook --json '{"allowed": true}' --listen-addr 127.0.0.1 --listen-port 5000

ウェブフックは JavaScript でロジックを書けるようにする予定です。

$ sora webhook --script webhook.js
export function authWebhook(request) {
if request.multistream == false {
return {
allowed: false,
reason: "multistream is false",
}
};

return {
allowed: true,
};
}

export function sessionWebhook(request) {
return {}
}

export function eventWebhook(request) {
}

Sora DevTools

https://github.com/shiguredo/sora-devtools/

より検証をしやすくする仕組みを追加予定です。

  • デバイスのみをつかむ media access ボタンの追加
  • 映像の情報を表示する MediaStats の追加
  • RTCRtpSender.getCapabilities(“video”).codecs 表示機能
  • RTCRtpReceiver.getCapabilities(“video”).codecs 表示機能
  • UI ライブラリの切り替え

また React-Bootstrap から Tailwind CSS (shadcn/ui) へ切り替えを予定しています。切り替えに興味がある方は Discord の #sora-devtools までご連絡ください。お仕事としてお願いしたいです。

Sora Client SDK for Web

https://github.com/shiguredo/sora-js-sdk

Sora JavaScript SDK として提供しているブラウザ向けの Sora SDK ですが、今後は名前を変える予定です。あくまでブラウザ向けであり名前がマッチしていなかったことや、今後提供するサーバー SDK と明確に分ける目的です。

互換性を破壊する変更を入れる予定はありません。新しいインターフェースを追加したとしても、古いインターフェースは継続します。

Sora Client SDK for iOS

https://github.com/shiguredo/sora-ios-sdk

こちらも名前変更予定です。

名前の変更に伴い C++ SDK 化を予定しています。こちらは今まで Swift で実装していた多くの部分を Sora Client SDK for C++ ベースに切り替えます。Swift 版と C++ 版の互換性は維持します。

Sora Client SDK for Android

https://github.com/shiguredo/sora-android-sdk

こちらも名前変更予定です。

名前の変更に伴い C++ SDK 化を予定しています。こちらは今まで Kotlin で実装していた多くの部分を Sora Client SDK for C++ ベースに切り替えます。Kotlin 版と C++ 版の互換性は維持します。

Sora Client SDK for C++

https://github.com/shiguredo/sora-cpp-sdk

こちらも名前変更予定です。

積極的な改善を行っています。他の SDK のコア SDK ということで、色々機能を追加しています。互換性はできるだけ壊さないようにしていきます。

Sora Client SDK for Unity

https://github.com/shiguredo/sora-unity-sdk

こちらも名前変更予定です。

ハードウェアアクセラレーターを使わないといった設定を指定できるようにしたり、カメラの切り替え、デバイスをつかまないようにするなど、多くの便利な機能を実現しているところです。

Sora Client SDK for Python

https://github.com/shiguredo/sora-python-sdk

こちらも名前変更予定です。

音声フレームをリアルタイムに処理できるようにしたり、マルチプロセスでの処理を可能にするために音声フレームを Pickel 化できるようにしたりしています。Python から気軽に WebRTC の音声や映像を使えるように、より便利な機能を追加していきます。

Sora Client SDK for C

現在絶賛開発中です。

libwebrtc は圧倒的なのですが、巨大すぎてハードウェアに組み込むには向いていません。そこで libwebrtc を使わず libdatachannel を利用した C から呼び出せる Sora SDK を開発中です。

  • libdatachannel を利用することで libwebrtc の頻繁なリリースに追従する必要がなくなります
  • libdatachannel と Mbed TLS を利用することで SDK のサイズを最小で 4 MB に押さえることが可能になります。
  • Apache-2.0 ライセンスで OSS として公開します
  • 対応 OS: Raspberry Pi OS / Ubuntu Server 22.04
  • 対応アーキテクチャ: x86 / x86_64 / armv6 / armv7 / armv8

つまり、軽量かつアップデートをコトンロールしやすい SDK です。

すでに Sora 経由で、 Opus/H.264 で音声/映像の配信を実現できています。2023 年内にソースコードの公開を予定しています。

WebRTC Load Testing Tools Zakuro

https://github.com/shiguredo/zakuro

  • 負荷を断続的にかける仕組みを追加
  • Lyra 対応
  • VP9 / AV1 サイマルキャスト対応
  • Ubuntu 22.04 x86_64 プラットフォーム追加
  • Connection ID をファイルに出力する機能

より便利に使えるように機能を追加しています。

Recording Composition Tool Hisui

https://github.com/shiguredo/hisui

多くの機能を追加しています。

  • oneVPL を利用したハードウェアエンコーダーへの対応
  • AV1 の WebM と MP4 エンコード対応
  • AV1 の WebM デコード対応
  • Lyra V2 WebM デコード対応
  • Safari での MP4 (VP9/AAC) 再生対応
  • OpenH264 を利用した H.264 エンコード対応

今後は分割録画対応と HLS 形式でのファイル出力を予定しています。

WebRTC Stats Collector Kohaku

https://github.com/shiguredo/kohaku

一から書き直しました。さらに Grafana ダッシュボードも chrome://webrtc-internals を意識して作り込みました。

直近のクライアントが並ぶ
クリックするだけで inbound-rtp が確認可能

今後は Grafana ダッシュボードに outbound-rtp などを追加して行く予定です。

Audio Streaming Gateway Suzu

https://github.com/shiguredo/suzu

開発は一段落しています。当面はメンテナンスをしつつ、優先実装依頼待ちです。

Media Processors

https://github.com/shiguredo/media-processors

明るさを調整する機能を提供しています。当面はメンテナンスをしつつ、優先実装依頼待ちです。

WebRTC Native Client Momo

https://github.com/shiguredo/momo

Raspberry Pi OS (64 bit) に完全対応したバージョンの開発を終え、現在検証中です。9 月中にはリリース予定です。今後は年 1 回のメジャーアップデートを目標に進めていきます。libwebrtc のみのアップデートは行うかもしれません。

ちなみに Momo は libdatachannel の利用はせず、libwebrtc の利用を継続します。

Sora Exporter

https://github.com/shiguredo/sora_exporter

現在は Sora への追従のみとしています。

Sora Archive Uploader

https://github.com/shiguredo/sora-archive-uploader

2023 年内にリリースを行う予定です。

Sora Server SDK

Sora の API やウェブフックを利用しやすくするためのサーバー SDK の開発を進めています。

Sora Server SDK For Go
https://github.com/shiguredo/sora-server-sdk-go

Sora Server SDK for TypeScript
https://github.com/shiguredo/sora-server-sdk-ts

Sora Cloud の副産物として生み出された、Go/TypeScript で Sora のウェブフックや API を処理するサーバーアプリケーションを開発するための SDK です。

Go は少し前からありましたが、本格的にリリースに向けて開発を進めていきます。

Sora Cloud で利用していくこともあり、最新の Sora に対応していく予定です。正式リリースは 2023 年内を予定しています。

ファーストリリースは Sora 2023.1.0 対応としてのリリースとなります。

Sora Serve SDK for Python

現在開発を検討中です。

WebRTC Signaling Server Ayame

https://github.com/OpenAyame/ayame

ウェブフックの mTLS 化を予定しています。それ以外はメンテナンスモードです。ただインターフェースをそのままに色々書き直すかもしれません。

Shinonome (仮)

Sora クラスターの 1 ノードとして動作する、リアルタイム合成配信ツールです。Sora クラスターリレー機能を利用することで音声/映像を受け取りリアルタイムに合成し HLS/MPEG-DASH 形式で出力し、S3/S3 互換ストレージにアップロードする製品です。

この機能を利用することで、より大規模な配信や追っかけ再生を実現することが可能になります。変換サービスに依存しないことで、コストも抑えられるようになります。

2024 年内に Apache-2.0 として OSS で公開予定です。

Kamenozoki (仮)

Sora 下位互換の WebRTC SFU を開発中です。ただしまだビジネスモデルがうまく考えられていないので提供は未定です。

Sora とは違いソースコードを GitHub に公開予定です。ライセンスは BUSL-1.1 になるため、商用利用はできず、OSS ではありません。

また Sora は Erlang で書いてますが、Kamenozoki は Go (Pion) を利用して書くため内部挙動は変わります。

Sakura (仮)

Sora や Sora Cloud で利用できるビデオミーティングツールを開発予定です。Cloudflare Workers にデプロイするだけで使えるようになります。

単に自分たちが使いたい、というモチベーションがとても強いです … 。

多機能にはしていきたいと思っていますが、まずは最低限の機能を用意しつつという感じです。

Apache-2.0 ライセンスで OSS として公開予定です。

オプションとしてパスキー対応を予定しており、こちらは 1Password が提供している SaaS を利用する予定です。https://passage.1password.com/

Discord コミュニティ

  • 参加者が 1700 人を突破しました
  • WebRTC 入門の参加者がのべ 300 人を超えました

今後も匿名性を重視し、3 ヶ月に 1 回程度の間隔でオンラインイベントを開催していければと思います。

開発終了

Sora Flutter SDK の開発を終了しました。時雨堂のターゲット層にマッチしないと判断したためです。ただし、fork をしてメンテナンスを継続したいとの連絡を頂いてるので、続報をお待ちください。

--

--