shiguredo
Published in

shiguredo

時雨堂製品アップデート

2022 年 5 月版

去年は毎月いろいろと書いていましたが、今年は不定期に書きたくなったら書くという感じでいこうと思います。

WebRTC SFU Sora

次のリリースは 2022 年 6 月を予定しています。WebRTC 関連の機能は一通りそろったこともあり、Sora 独自機能やミドルウェア機能を充実させていく予定です。

次のリリースに含まれる機能について紹介していきます。大きめの機能はあまり入らず改良系の変更がほとんどです。

Sora 開発版ドキュメント

開発版のドキュメントを公開しています。

サイマルキャスト無効でのスポットライト機能の利用

スポットライト機能は直近で話をしていない人の音声を送らず、映像も画質を下げるといった仕組みです。

詳細は以下をご確認ください。

スポットライト機能の利用時、今まで配信側はサイマルキャスト対応が前提でしたが、サイマルキャストなしでも動作するようになりました。

録画機能のクラスター対応

録画の状態をクラスター全体で共有します。どこかのノードに障害があった場合でもそのチャネルの録画情報を維持し続けます。

再接続した際に別のノードに接続した場合でも録画が開始されます。

クラスターノードライセンスの導入

Sora のライセンスは 1 起動 1 ライセンス必要です。ただこの場合だとクラスターを組むときにいろいろと面倒になります。そのためクラスター構築時に同じライセンスファイルを利用できるようにするクラスターノードライセンスを導入しました。

このライセンスを使うとクラスターを組む際に、複数の Sora へ適用するライセンスファイルが一つで済むようになります。

クラスター自動構築機能

Sora は今まではクラスターに参加するには JoinCluster API を叩く必要がありましたが、次のリリースでは設定ファイルにクラスター参加予定の複数のノード名を書いておくことで、起動時に自動でクラスターに参加する機能を追加しました。

この機能によりクラスター利用がぐっと簡単になります。

クラスター自動復旧機能

ネットワーク切断やサーバー障害などでクラスターのノードが離脱してしまった際に、孤立したノードを過半数以上のクラスターが回収していく機能を追加しました。

クラスタースプリットブレイン対策

スプリットブレインが発生した際に半数未満のクラスターに参加するノードはすべての接続を切断し、新規接続を受け付けない状態に自動で移行する仕組みを追加しました。

その後は過半数以上が参加するクラスターが孤立したノードを回収していきます。

クラスタータイブレーク対策

クラスターを構築する際はスプリットブレインを考慮して 3 台以上が前提ですが、2 台でもクラスターが使えるようにするためにタイブレーク対策を追加しました。

タイブレーク対策とは、1+1 の状態や 2+2 といった同じノード数のクラスターの二つに分かれてしまった場合に、クラスタ内のノード名を辞書順にソートして、その先頭が含まれている方のクラスターを「過半数以上のノードが参加しているクラスター」と見なす機能です。

この機能により 1+1 といった 2 台構成のクラスターでスプリットブレインが発生した場合でもサービスの継続が可能になります。

復号処理の削減

スポットライト機能やサイマルキャスト機能の利用時に、視聴されていない音声と映像は、クライアントから受信した時点で復号せずに破棄する仕組みを追加しました。

この仕組みを導入することで暗号処理のボトルネックを減らすことに成功しました。

bundle_id の導入

bundle_id という概念を導入します。これはクライアントからの認証成功時に指定できます。

この値を指定したクライアントどうしはそのクライアントからの音声や映像を受信しなくなります。

たとえば送受信で接続している際に、画面共有で配信された映像を受信したくないといった場合に利用することを想定しています。

ログの改善

sora.log や intenerl.log に利用されている時間表記を RFC3339 に統一しました。また、これら二つのログを JSON で出力できるようにする予定です。

統計機能の充実

DataChannel の再送回数や破棄回数など、通常では取得しづらい統計情報や、復号せずに破棄した数、おかしなパケットを受け取った数などを統計情報として取得できるようにしました。

パケット処理の最適化

パケットのエンコードとデコード処理を見直し、計測し、改良しました。

センシティブデータの編集済み出力機能

event_metadata にはセンシティブなデータが含まれる可能性が高いため、ログに出力する際は “REDACTED” という文字列に置き換えるように変更しました。

また API や 録画メタデータに出力される場合も、デフォルトでは “REDACTED” に置き換えるように変更しました。ただし API や録画メタデータに関しては設定で編集済みにせずそのまま出力することも可能です。

Sora JavaScript SDK

バグ修正と改良系の変更だけで、今のところ Sora への追従のみです。

Sora DevTools

大規模リファクタリングしています。さらに細かい機能を追加したりしています。より検証などで使いやすくするための機能を搭載予定です。

Sora Prebuilt UI

スポットライト機能を利用したシンプルなビデオ会議システムです。Sora Labo や Tobi への組み込み用に開発中です。

Sora E2EE

ライブラリはアップデートしていますが、少し停滞中です。他のことにリソースを回しています。MLS とか SFrame (SPacket) などは情報だけは追いかけています。

Sora iOS SDK

Sora への追従がメインです。バグ修正、改良、リファクタリングも進めてます。サンプルの見直しなども進めています。

認証付き HTTP Proxy 対応

libwebrtc は認証付き HTTP Proxy を処理する機能は入っていますが iOS SDK ではそのまま利用できません。そのため libwebrtc にパッチを当てて iOS 経由で利用できるようにします。

この機能を導入することで認証付き HTTP Proxy がある状況でもTURN-TLS を利用して通信が成功するようになります。

Sora Android SDK

Sora への追従がメインです。バグ修正、改良、リファクタリングも進めてます。サンプルの見直しなども進めています。

認証付き HTTP Proxy 対応

libwebrtc は認証付き HTTP Proxy を処理する機能は入っていますが Android SDK ではそのまま利用できません。そのため libwebrtc にパッチを当てて Android 経由で利用できるようにします。

この機能を導入することで認証付き HTTP Proxy がある状況でもTURN-TLS を利用して通信が成功するようになります。

Sora Unity SDK

Sora への追従がメインです。バグ修正、改良、リファクタリングも進めてます。

今後 Sora Unity SDK は C++ SDK をベースにする予定です。そのため以下の変更が入ります。

  • Ubuntu 対応
  • Intel Media SDK 対応
  • macOS x86_64 非対応

また、企業からの支援を受けて Hololens 2 対応をお試しプロジェクトとして公開しています。

デバイスを一切つかまない仕組みなども対応予定です。

Sora C++ SDK

macOS / Windows / Linux / iOS / Android に対応した C++ SDK を開発中です。NVIDIA Jetson にも対応し HWA での encoder/decoder を利用できるようににします。

やりたい放題できる SDK を目指します。

Media Processors

音声や映像をエッジ側で処理するライブラリで、まずはブラウザレベルで進めています。

将来的には明るさ調整や、AGC なども仕組みとしては提供したいなと考えています。ただ、時雨堂は前処理に強いわけではないので、簡単に使える仕組みを提供するというのに特化していきます。

プロジェクトにまだ含めていませんが、深層学習ベースのエンコーキャンセラをブラウザで動かすライブラリをお試しで公開しました。

Zakuro

顧客からの要望を反映したりしています。Sora への追従もしていきます。

  • コネクション ID 一覧を出力する機能を追加しました
  • スポットライト関連の設定を追加しました
  • サイマルキャスト関連の設定を追加しました
  • OpenH264 のバージョンを上げました

統計情報をうまく出力して可視化できればと考えています。

Hisui

ダイキン工業様に依頼いただき、レイアウト機能を開発しました。

機能としては一段落しており、今後は AV1 対応などを進めていく予定です。

Kohaku

Sora 経由でクライアントの統計情報を集計するツールですが、今後は Sora 側からみたクライアント統計情報を Kohaku 経由で TSDB (タイムシリーズデータベース) に追加する仕組みを用意する予定です。

Sora exporter

Sora の GetStatsReport API を OpenMetrics 形式に変換して公開する exporter です。時雨堂では VictoriaMetrics 経由で利用しています。

https://github.com/johejo/sora_exporter johejo さんが公開されていたのを fork して機能を追加したりしています。

すでに時雨堂のサービスでは有効活用しています。

WebRTC Native Client Momo

基本的にはライブラリと libwebrtc のアップデートがメインです。

NVIDIA Jetson Orin が手に入り AV1 HWA や MJPEG HWA への対応を進めています。一通り動くようになったら公開予定です。

ちなみに Sora のメッセージングに対応する予定はありません。C++ SDK をご検討ください。

WebRTC Signaling Server Ayame

仕様変更は問題が起きない限りは行いません。依存ライブラリのアップデートのみ行っています。

WebRTC Build

協力者募集中です。

Sora as a Service Tobi

Sora を SaaS として提供するサービスです。転送量や利用時間での課金は行わず、接続数と帯域で課金するサービスです。

あくまで Sora をマネージドとして提供するサービスとして特化するため「Sora を構築/運用しなくて良い」を目指します。

6 月からアーリアクセスとして提供を予定しており、正式リリースは 10 月の予定です。

https://gist.github.com/voluntas/ef9b064e5832a784e0b5e654fee832a8

Low Latency Streaming Server Shion (仮)

新しくお試しで作っている片方向特化型の低遅延配信サーバーです。Sora のようなクラスターの仕組みとは別で Edge/Origin の多段構成で大規模な低遅延方配信を実現する予定です。

配信プロトコルは Twitch が採用している Warp と WebTransport を採用します。

とりあえず HTTP/3 周りは Rust で、それ以外は Erlang でというハイブリッド構成で開発し、パッケージ製品と SaaS の両方で提供予定です。

クライアント側は Rust で開発し、iOS / Android SDK を提供する予定です。

Ayame Labo

ayame-labo.shiguredo.app へ移動して、 TURN サーバーを独立したサーバーに切り替えました。

Sora Labo

個人や企業が気軽に Sora を試せる場所として無料で提供しています。時雨堂側でも Sora の実験場所として利用しています。

直近 30 日で 2000 分まで自由に利用できますので、いろいろ触ってみてください。

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store