時雨堂 WebRTC SFU サーバ製品化に向けて

ちまちま作り続けてはや半年。ついに WebRTC SFU の作成がほぼ出来るところまでの実装にたどり着いた。

半年間何をやっていたかというと、主に以下のライブラリの実装してた。

  • DTLS 1.2 (AEAD) ライブラリの実装
  • SRTP/SRTCP ライブラリの実装
  • SDP (ICE) ライブラリの実装
  • SFU の実装

全て WebRTC に特化させて実装したので、かなり小さく作ってある。

SFU というのは WebRTC をサーバ経由で PubSub っぽい感じでできると思って貰えばいい。

Image for post
Image for post

凄い簡単な図になるが、C1 の動画を C2 と C3 に配信する仕組み。C1 は SFU とだけ通信すれば良い。パケットのコピーは SFU がやってくれる。

フルメッシュではなくなるのでとてもシンプルになる。さらにサーバを経由することでサーバサイドで録画することが可能になる。

さて、ちまたで動画や音声サーバだと負荷が重いという話だが、とりあえず組み上げた SFU を試してみたところ、1 接続で 1 % 程度しか CPU を使用しない。メモリに至っては 30MB だ。

5 接続で CPU 使用率 3% 程度。メモリは変わらず。最小構成なのでここから増えては行くかも知れないが、かなりスケールしそうである。

もちろん Erlang/OTP で実装しているので CPU の数分だけスケールしてくれる。

また、SFU は DTLS 終端も可能なので RTP をどこかに送る事も可能だ。

またデモ用に WebRTC SFU on Raspberry Pi 2 も可能ではないかと思ったりしている。

WebRTC やりませんか。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

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