Skip to content

Instantly share code, notes, and snippets.

@voluntas
Last active February 15, 2024 13:00
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save voluntas/046e7e1a1459f598c7e7eb6c01229de7 to your computer and use it in GitHub Desktop.
Save voluntas/046e7e1a1459f598c7e7eb6c01229de7 to your computer and use it in GitHub Desktop.
WebRTC SFU Sora の紹介と WebRTC と WebTransport の現状について

WebRTC SFU Sora の紹介と WebRTC と WebTransport の現状について

日時

2022-03-28

voluntas

バージョン

2022.5

URL

https://voluntas.github.io/

depth

3

2022 年 3 月 30 日に行われる 第1回 Takeshiba WebMeeting の発表者用の資料です。

自己紹介

Twitter ID は voluntas です。 時雨堂 の方から来ました。

概要

今日は WebMeeting Software Suite に採用いただいた時雨堂製品の紹介と、WebRTC や WebTransport といった関連技術について簡単にお話しようと思います。

WebRTC SFU Sora の紹介

WebRTC SFU というサーバ経由で配信を行う製品である WebRTC SFU Sora を開発/販売しています。ありがたいことに多くのお客様に採用いただいています。よくある OSS をかついだ SaaS ではなく、1 から自社開発したパッケージ製品として販売してもう 7 年目です。

ウェブサイトやドキュメントにすべての情報を載せているので、気になった方はそちらを見てもらうとしてどんな特徴があるのかをざっと紹介していこうと思います。

シンプルでわかりやすいウェブサイト

充実したドキュメント

多くの採用事例

見ていただければわかります。

https://sora.shiguredo.jp/cases

SDK がすべてオープンソース

音声と映像の配信なので、クライアントが必要です。 時雨堂ではクライアントを実装するための SDK をすべて Apache License 2.0 でオープンソースとして公開しています。

もちろん、継続的なメンテナンスも行っています。

Discord によるコミュニティ運営

コミュニティマネージャが 2 名おり、自社のオープンソース製品やサービスなどの疑問に対応します。

https://discord.gg/shiguredo から参加可能です。

1 から開発

オープンソースの SFU をベースにしているのではなく、プロトコルスタックからすべて自前で実装しています。 自前実装の最大のメリットは 実装してるので一通り理解している です。

数億ユーザがいる WhatsApp や同時接続数百万の Discord、任天堂の通知システム に利用されている Erlang/OTP という言語を採用しています。

7 年提供してきてお客様環境でのサーバシャットダウンまでの障害はコーナケースによるメモリリークでの OOM Killer で殺された一度だけです。

開発者がサポート担当

Sora 開発者は Sora サポートも兼任します。これはソースコードレベルで理解をしている開発者がサポートを担当することが一番効率よいという自分の経験から来ています。

クラスター構築

独自機能

Sora はクラスター機能をもっており、ロードバランサー機能も提供しています。

https://sora.shiguredo.jp/features#cluster

スポットライト機能

独自機能

ユーザのマシン負荷を下げたい場合にできることは、とにかく受信パケットを減らすことです。 そうすることでデコード負荷がさがります。それをサーバ側でうまいことやる機能がスポットライトです。

https://sora.shiguredo.jp/features#spotlight

リアルタイムメッセージング機能

独自機能

WebRTC にある DataChannel という SCTP over DTLS over UDP を利用したメッセージング機能を互換性を維持しながら拡張することで、 リアルタイムなメッセージング機能を実現しています。

https://sora.shiguredo.jp/features#messaging

End to End Encryption 対応

Signal や Google Duo が採用している End to End Encryption の仕組みを採用しています。

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

Sora を便利にするツール

時雨堂では、Sora を便利に利用できるツールを Apache License 2.0 でオープンソースとして提供しています。

負荷試験ツール

キャパシティプランニングしたいですよね、でも WebRTC の負荷試験は難しいです。 コマンド一つ、YAML でシナリオが書けて、ブラウザ互換の挙動をする負荷試験ツールを提供しています。

https://github.com/shiguredo/zakuro

録画ファイル合成ツール

WebRTC SFU は 転送 するため、合成ができません。そのため録画した映像は個別に録画されるため、1 つにまとめる仕組みが必要になります。JSON でレイアウトが指定できる合成ツールを提供しています。

https://github.com/shiguredo/hisui

統計情報収集ツール

WebRTC は リアルタイム を最優先にしているため、統計情報は刻々とかわり、クライアントの統計情報を取得するのはかなりコストが高くなります。

WebRTC SFU Sora 経由で統計情報を受け取り TSDB (タイムシリーズデータベース) に格納するツールを提供しています。

https://github.com/shiguredo/kohaku

メディア処理

Web会議をするときもう当たり前になった背景ぼかしや仮想背景、ノイズ抑制などをブラウザで実現するのは苦労する場合があります。それらを簡単に実現できるようなライブラリをベンダーロックフリーで提供しています。

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

WebRTC SFU Sora as a Service の紹介

CPaaS (Communications Platform as a Service) ではなく SaaS (Software as a Service) です

パッケージメーカーが次にとるアクションとしては、パッケージのマネージドサービスの提供でしょう。 ということで、本当にマネージドしかしてくれないサービスを開発中です。

Sora に付加価値をつける素敵な機能などは提供しません。マネージドへ特化させるサービスです。

クラスターを構築し、がっつりと監視、転送量無制限のベアメタルサーバに乗せて、 ダッシュボードが利用できる、転送量無制限のサービスとして提供予定です。

また、先ほど紹介した録画合成や統計解析といった Sora 周辺ツールを追加費用で利用できるような仕組みを提供予定です。

制限は同時接続数と帯域だけです。価格も定額です。ただ固定だと困る方向けに上限ありきの使った分だけ追加で費用を請求する仕組みも提供します。ベースは固定です。

時雨堂 WebRTC SFU Sora as a Service Tobi 開発ログ

WebRTC の現状

WebRTC は登場してもう 10 年以上過ぎています。もともと枯れていたプロトコルの寄せ集めということもあり、枯れきった技術といって問題ありません。

今後は新機能は特に出ることなく、小さな改善の積み重ねのターンに来ています。すごい技術から当たり前の技術になりました。

まだ新しい技術だし ... と思ってるかたはこれを機会に是非触ってみてください。

時雨堂の Sora が直近 30 日 2000 分まで無料で触れる Sora Labo というサービスがありますのでもしよければどうぞ。

https://sora-labo.shiguredo.app/

WebTransport の現状

WebRTC の次の技術として WebTransport が取り上げられることが多いです。実際 WebRTC は様々な技術をひとかたまりにしてブラウザからシンプルな API で利用できるようにした技術です。

WebTransport はこれの真逆で双方向通信部分だけ WebRTC から取り出したプロトコルです。QUIC や HTTP/3 といった今時の技術を採用しています。 Chrome / Edge ではすでに利用可能です。

WebRTC の違いや、WebTransport の使い道について資料を見ながら簡単に話していきます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment