時雨堂では自社製品 WebRTC SFU Sora の様々なクライアント向け SDK を開発 / 提供しています。そして全ての SDK で libwebrtc を利用しています。(JavaScript SDK もブラウザが libwebrtc を利用しています)
libwebrtc は機能や品質など全てが圧倒的なのですが、とてもやっかいなことがあり、それは … 月 1 回リリースされます。時雨堂はこの月 1 回のリリースに積極的に追従していっていますが、顧客は月 1 回のリリースに追従していくのは現実的ではありません。さらに、過去のリリースに対してはセキュリティパッチは当たりません。つまり安全を考えると常に最新版を利用するしかありません。
そこで libwebrtc を利用しない WebRTC クライアント SDK を開発をすることに決めました。機能や品質は下がっても頻繁なリリース対応から解放される選択肢を顧客が取れることを目指します。
年 1–2 回のメジャーアップデート程度に抑えることを目標にします。
libdatachannel
とは言えさすがに一から開発していくほど体力があるわけではありません。そこで選択したのが libdatachannel です。libdatachannel は名前から想像できませんが WebRTC Media/DataChannel と WebSocket を実装したライブラリです。
libdatachannel is an open-source software library implementing WebRTC Data Channels, WebRTC Media Transport, and WebSockets.
libdatachannel はすでに実績があり、 OBS の WebRTC 実装 (WHIP) に採用されています。また暗号化用のライブラリも軽量な Mbed TLS が利用できるというのもポイントが高いです。
依存性もできるだけ少なくなっており、ビルドコストが低いです。実際 OBS が libdatachannel を採用した理由にはビルドが簡単というのがあったようです。
It is written in C++17 and offers C bindings.
さらに C バインディングも提供しています。
以下は対応予定機能です。
WebRTC SFU Sora シグナリング対応
WebRTC SFU Sora が提供する機能には最低限のみ対応し、それ以外は優先実装にて対応していきます。
優先実装とは、有償による OSS に対する前倒し実装です。
対応コーデック
音声は Opus 映像は H.264 / H.265 についてはハードウェアアクセラレーター (HWA) のみ対応していきます。
優先実装で AAC や VP8 や VP9 や AV1 、そして H.266 (VVC) で対応していきます。AAC と H.266 については Sora 側の改修も含みます。
対応 OS
Linux は Raspberry Pi OS と Ubuntu Core / Ubuntu Server への対応を予定しています。検証向けに macOS (ARM64) にも対応します。
優先実装として iOS / Android / Windows IoT への対応可能です。
対応アーキテクチャは ARMv6/v7/v8 と x86/x86_64 です。どこまで実現できるかはわかりませんが、ARMv5 や RISC-V への対応も検討していきたいです。
中長期的なメンテナンス
中長期的なメンテナンスを検討しています。Ubuntu Core は 10 年ということもあり、10 年はメンテナンスを継続します。
無理なアップデートをしない
前述のとおり libwebrtc はセキュリティパッチの適用が最新のバージョンにしか行われません。そのため、常に最新バージョンを利用する必要があります。
今回の C SDK では、無理に最新版を利用しなくても良いようにする予定です。ライブラリアップデートとセキュリティアップデートしかしない LTS 版などを有償で提供することも考えています。
ライセンス
ライセンスは Apache License 2.0 で公開します。フォークで特殊な HWA 向けにチューニングをしたバージョンなどが出てきたりするのも楽しみです。
新しい市場へ切り込む
WebRTC は今まで様々な場所で使われてきています。中長期的に採用できる WebRTC クライアント SDK というのは今までありませんでした。そこに切り込んでいきます。興味ある方はぜひ Discord に参加して、フィードバックを送る準備をしてください。