WebRTC SFU Sora の今後
2020 年 9 月末に WebRTC SFU Sora 2020.2 をリリースしました。今後は 2020 年 12 月のリリースに向けて色々仕込んでいきます。
リリース
リリース方針
Sora は毎年 6 月と 12 月に大きめのリリースを行います。それ以外はバグ修正などがメインとなります。
2020.2 リリース
2020 年 9 月末に 2020.2 のリリースを行いました。
リリース予定
2020 年 12 月頭に 2020.3 のリリースを予定しています。
- サイマルキャスト正式対応
- サイマルキャスト設定カスタマイズ対応
- サイマルキャスト録画対応
- サイマルキャスト転送対応
- スポットライト録画対応
- シグナリングの DataChannel 化
- E2EE (WebAssembly 版) 対応
サイマルキャスト
サイマルキャストを主軸においていくこともあり、サイマルキャス周りを積極的に改善していきます。
サイマルキャスト正式対応
録画と転送に対応し、サイマルキャストへの正式対応を予定しています。これは Safari 14 でサイマルキャストに対応したこと、Firefox 83 (2020 年 11 月リリース予定) でサイマルキャストが安定的に動作しそうなことが理由です。
サイマルキャスト設定カスタマイズ対応
設定ファイルからサイマルキャストの払い出し設定をカスタマイズ可能にします。以下のように優先順位で並べて設定します。回線が不安定になった場合は r2 から消えていき、かならず r0 が残ります。
[{rid: "r0", maxFramerate: 1},
{rid: "r1", maxFramerate: 10},
{rid: "r2", maxFramerate: 25}]
設定できる項目は maxFramerate や maxBitrate 、scaleResolutionDownBy です。同一解像度でフレームレートだけが異なるなども設定可能にする予定です。
サイマルキャスト録画対応
多くの方から要望を頂いておりました。対応できる見込みがでましたので対応していきます。優先順位が一番「低い」ものを録画していきます。
[{rid: "r0", maxFramerate: 1},
{rid: "r1", maxFramerate: 10},
{rid: "r2", maxFramerate: 25}]
これであれば r2 を録画します。例えばネットワークが不安定になって r2 が配信されなくなったら r1 を録画します。優先度が一番高い r0 は必ず配信され続けます。
サイマルキャスト転送対応
録画と同じで優先順位が一番「低い」ものを転送します。
スポットライト録画対応
サイマルキャストと同様で優先順位が一番「低い」ものを録画します。これはスポットライトがフォーカスされているかどうかというのは考慮せず全員を優先順位が低いもので録画します。
シグナリング
WebRTC のキモといっていいシグナリングですが、WebSocket をやめて DataChannel に切り替える予定です。最初だけは HTTPS を利用しますが、その後はすべて DataChannel になります。
サーバからのプッシュを遅延なく実現する場合、WebSocket が詰まるという問題をどうしても解決が難しいため、DataChannel の採用に踏み切りました。
シグナリングの DataChannel 化
WebSocket は当たり前ですが不安定な環境では厳しいため、今後 push / notify / signaling などのサーバプッシュ系はすべて DataChannel を利用するという方針に切り替えていきます。
どこかのタイミングで実験的利用ができるように進めています。その前に実験的機能として導入予定です。WebSocket ベースもそのまま残しますのでご安心ください。ユーザは SDK と Sora をアップデートするだけで動作します。
シグナリング経由での音量通知
ずっと要望を頂いていたのですが、WebSocket 経由だと他の通信の邪魔になってしまうという事から採用を見送っていましたが、DataChannel 化することで、チャネルを分けて流せるということで採用予定です。
End to End Encryption
色々と話題になってきた E2EE ですが、大変むずかしい仕組みのため慎重な設計と実装が求められます。基本的には既存である技術を活用するというのが良いと考えているため、Signal ベースの仕組みをまずは採用し、その後 MLS ベースの仕組みを検討しています。
メッセージングサーバは立てずにすべてSora が管理できるような仕組みにする予定です。つまり Sora さえいれば E2EE も簡単に利用できる事を目指します。
X3DH + Double Ratchet + SFrame ベースの E2EE の採用
X3DH や Dobule Ratchet は Signal 採用している仕組みです。SFrame は Google Duo が採用している仕組みです。
この機能を Go のWebAssembly 機能と Web Crypto と Web Worker を利用することで実現しています。すでに WebRTC SFU Sora でプロトタイプは動作しています。
2020 年内にはオープンソース化とファーストリリースを予定しています。
なぜ SFrame なのか
SFrame はフレームの暗号化のための仕組みで Google Duo にも採用されています。今回 SFrame を少し拡張して採用しました。
安全性検証
クライアント側は OSS として公開しますが、Sora 側はクローズドソースのため「悪意あるサーバ管理者」によって情報が盗み見られない事を保証する必要があります。
こちらは暗号と E2EE の専門家である五十部さんを技術顧問として招聘いたしました。
既存実装の懸念事項はほぼ潰せており、オープンソース化後に安全評価をお願いする予定です。
Momo / iOS / Android SDK の E2EE 対応
libwebrtc には E2EE 用のインターフェースがあることがわかったため、なんとかできればと考えています。
Sora SDK
Sora SDK も継続的に開発していっています。またコミュニティからのフィードバックを可能な範囲で取り入れています。
Sora JavaScript SDK
Safari や Firefox へのSimulcast 対応、E2EE (WebAssembly) 対応を今後予定しています。
Sora Unity SDK
今後はサイマルキャストと新しいスポットライトへの対応を予定しています。
Sora iOS SDK
当面はメンテナンスモードで、Sora への追従のみとなります。
Sora Android SDK
新しく使いやすい API を提供していく予定です。既存の API をラップした便利な API となるため、下位互換性は保たれます。
その他
帯域推定を利用したビットレートコントロール
クライアント側の帯域を推定し、ビットレートをコントロールしていきます。不安定な回線ではビットレートをまずは半分にしてみて様子を見るというのが主な機能です。
WebRTC で画質を上げるというのはかなりリスクが伴うため、画質を上げるのはかなり慎重に対応する予定です。
WebCodecs / WebTransport 対応
Chrome が Origin Trial で WebCodecs や WebTransport が利用できるようになりました。今後はこちらにも対応していこうとは考えています。2021 年からチャレンジしてく予定です。
ただ対応範囲が Chrome / Edge に限られるため、焦らずやっていく予定です。
FlexFEC 対応
RFC 化もされたため動きが出てくるかと思ったのですが、あまり動きがないため焦らずやっていく予定です。
Sora を採用したくなる OSS
今後の方針として「Sora を採用したくなる OSS の提供」をかかげています。Sora や Sora SDK をより良くしているのはもちろん、それ以外の部分で「あ、このツールがあるなら Sora 採用しよう」と思えるものを提供していこうと考えています。
詳細は以下に書いてありますので、興味ある方は読んでみてください。
Sora 向け負荷試験ツール Zakuro
ファーストリリースとして OSS で公開しています。今後はマルチチャネル対応を進めていきます。設定ファイルを用意し、複雑な負荷を書けられればと思います。
Sora 向け録画合成ツール Hisui
2020 年内にファーストリリースを目標に進めています。第一弾は Docker ベースでの提供になる予定です。依存ライブラリがかなり多いため、まずは気軽に使える Docker からという方針です。
OSS として Apache License 2.0 で公開する予定です。
Sora 向け統計解析ツール Kohaku
Sora SDK と Sora 両方の統計情報を吸い上げて、解析できるツールを想定しています。
なかなか壮大な計画のツールなので 2021 年からゆっくり進めていく予定です。