WebRTC SFU Sora の今後

2020 年 11 月版

V
shiguredo
8 min readNov 30, 2020

--

2020 年 12 月 の Sora 2020.3 リリースに向けて機能フリーズしました。

リリース

リリース方針

Sora は毎年 6 月と 12 月に大きめのリリースを行います。それ以外はバグ修正などがメインとなります。

2020.3 リリース予定

2020 年 12 月頭に 2020.3 のリリースを予定しています。詳細は別に書いていますのでそちらをご覧ください。

シグナリング

WebRTC のキモといっていいシグナリングですが、WebSocket をやめて WebTransport や DataChannel に切り替える予定です。最初だけは HTTPS を利用しますが、その後は全て WebTransport や DataChannel へ切り替えらればと思っています。

サーバからのプッシュを遅延なく実現する場合、WebSocket が詰まるという問題をどうしても解決が難しいため、DataChannel の採用に踏み切りました。

シグナリングの WebTransport 化 (開発予定)

Chrome / Edge は WebTransport の実装に積極的ということもあります。WebSocket 部分を WebTransport 化することで Wifi <-> LTE の対応も可能になると思います。

2021 年 6 月のリリースには実験的機能として導入できればと思います。

signaling_web_transport = true

シグナリングの DataChannel 化 (開発予定)

WebSocket は当たり前ですが不安定な環境では厳しいため、今後 push / notify / signaling などのサーバプッシュ系はすべて DataChannel を利用するという方針に切り替えていきます。

まずは Sora Labo で体験できるように開発を進めていければと思います。WebSocket ベースもそのまま残しますのでご安心ください。ユーザは SDK と Sora をアップデートするだけで動作します。

2021 年 6 月のリリースには実験的機能として導入できればと思います。

signaling_data_channel = true

シグナリング経由での音量通知 (開発予定)

ずっと要望を頂いていたのですが、WebSocket 経由だと他の通信の邪魔になってしまうという事から採用を見送っていましたが、DataChannel 化することで、チャネルを分けて流せるということで採用予定です。

End to End Encryption

Siganl + SFrame

Signal プロトコルをベースとして、SFrame を利用した機能は一通り対応できたと考えています。あとは複数接続や複数チャネルを同一ページで利用可能にしたりしていく予定です。

Messaging Layer Security + SFrame

今後は MLS にも手を出していこうと考えています。2021 年 12 月のリリースに間に合わせられればと思います。

安全性検証

クライアント側は OSS として公開しますが、Sora 側はクローズドソースのため「悪意あるサーバ管理者」によって情報が盗み見られない事を保証する必要があります。

こちらは暗号と E2EE の専門家である五十部さんを技術顧問として招聘いたしました。2021 年も継続して技術顧問を願いすることにしました。

既存実装の懸念事項はほぼ潰せており、複雑な仕組みに対応したタイミングで安全性評価をお願いする予定です。

Momo / iOS / Android SDK の E2EE 対応

libwebrtc には E2EE 用のインターフェースがあることがわかったため、なんとかできればと考えています。まずは Momo から対応していく予定です。

メッセージング機能

E2EE 経由でのみメッセージング機能を実装しようか検討中です。現在 Double Ratchet は Sender Key の配送にのみ利用していますが、 E2EE メッセージの配送にも利用できるようにしたいと考えています。

メッセージング

Sora は今まで音声と映像のみに特化してきましたが、今後はメッセージング機能も対応していこうと考えています。

方針としては WebTransport で DataChannel でシグナリングとは別の経路を用意してシグナリングの邪魔をしないで利用できる状態を作れればと考えています。

Sora SDK

Sora SDK も継続的に開発していっています。またコミュニティからのフィードバックを可能な範囲で取り入れています。全てのSDK でスポットライト機能が利用できるようにできればと思っております。

Sora JavaScript SDK

Safari や Firefox へのSimulcast は対応済みです。また E2EE (WebAssembly) 対応にも対応済みです。Lerna 化しました。

Sora Unity SDK

今後サイマルキャストの対応を予定しています。また新しいスポットライトへの対応を予定しています。4K でのサイマルキャストを実現する予定です。

Sora iOS SDK

コミュニティフィードバックを頂き音声モードをもう少し詳細に設定できるようにする予定です。

基本的にメンテナンスモードで、Sora への追従のみとなります。

Sora Android SDK

新しく使いやすい API を提供していく予定です。既存の API をラップした便利な API となるため、下位互換性は保たれます。

その他

帯域推定を利用したビットレートコントロール

クライアント側の帯域を推定し、ビットレートをコントロールしていきます。不安定な回線ではビットレートをまずは半分にしてみて様子を見るというのが主な機能です。

WebRTC で画質を上げるというのはかなりリスクが伴うため、画質を上げるのはかなり慎重に対応する予定です。

WebCodecs / WebTransport 対応

まずはシグナリングから。

FlexFEC 対応

RFC 化もされたため動きが出てくるかと思ったのですが、デフォルトで対応するといったコミットが入ったり(revert されていましたが) しています。様子見です。

Sora を採用したくなる OSS

今後の方針として「Sora を採用したくなる OSS の提供」をかかげています。Sora や Sora SDK をより良くしているのはもちろん、それ以外の部分で「あ、このツールがあるなら Sora 採用しよう」と思えるものを提供していこうと考えています。

詳細は以下に書いてありますので、興味ある方は読んでみてください。

Sora 向け負荷試験ツール Zakuro

ファーストリリースとして OSS で公開しています。今後はマルチチャネル対応を進めていきます。設定ファイルを用意し、複雑な負荷を書けられればと思います。

Sora 向け録画合成ツール Hisui

ファーストリリースとして複数の WebM を合成して WebM ファイルを生成するといった機能を追加しました。

次は WebM ファイルではなく MP4 ファイルを吐き出せるようにします。ただし出力は VPX / Opus のみです。また H.264 デコードに OpenH264 を利用可能にする予定です。

Sora 向け統計解析ツール Kohaku

Sora SDK と Sora 両方の統計情報を吸い上げて、解析できるツールを想定しています。

なかなか壮大な計画のツールなので 2021 年からゆっくり進めていく予定です。

--

--