Rust で no_std な WebRTC ライブラリを作っている
時雨堂では libwebrtc に C API を生やして、Rust から利用できるようにした shiguredo/webrtc-rs というライブラリを公開している。
これとは別に、Pure Rust で WebRTC ライブラリを実装している。目的はシンプルに組み込みで利用できるようにすること。
組み込み向けの WebRTC ライブラリでは libpeer というのがあるのだが、残念ながらメンテナンスがあまりされていないのと、libsrtp や usrsctp に依存しているので、ビルドが少しめんどくさくなる。
なので、そもそも商用レベルの WebRTC ライブラリの実装経験を生かして no_std なピュア Rust な WebRTC ライブラリを作る事にした。
方針
- no_std としては core と alloc を利用
- 暗号ライブラリは no_std な Rust Crypto を採用する
- 暗号ライブラリは trait 化して feature で切り替えられるようにする
- 組み込みの場合は専用の暗号命令を持っていることがほとんどなため
- WebRTC クライアントとして特化させ SFU での利用を想定しない
- Sans I/O で実装しつつ Tokio を利用した仕組みも合わせて提供する
- RFC 準拠より最小実装を優先する
- セキュリティを重視する
- 中長期的に利用できるようにする
- Apache-2.0 で OSS として公開する
- W3C WebRTC API にできるだけ寄せる
- Sans I/O 部分は no_std で I/O は Tokio に依存
結果
時雨堂の Sora と接続して普通に映像を配信出来るところまできた。コツコツ作って公開まで持って行きたい。7 月くらいにはリリースしたいところ。
