時雨堂の WebRTC に関する取り組み

2020 年 04 月版

V
shiguredo

--

WebRTC 関連でどんなことをやっているか、やっていこうかというのを書いていこうと思います。時雨堂が WebRTC で何をやろうとしているのかの可視化です。

毎月書いていこうと考えています。時雨堂の WebRTC 製品に興味がある方は読んでみていただけると嬉しいです。

WebRTC Native Client Momo

詳細については OpenMomo プロジェクト をご確認下さい。

方針

WebRTC Native Client Momo はビルドの簡易化、libwebrtc への追従、単体で完結する事がメインです。

様々な OS やアーキテクチャーに対応しており、それらを簡易化し、誰もが簡単にビルドできるようにしています。また libwebrtc の最新バージョンに追従することで最新の技術を積極的に使えます。

ハードウェアエンコーダーへの対応も積極的にすすめています。現時点では Raspberry Pi と macOS 、Jetson Nano 、NVIDIA ビデオカードに搭載されているハードウェアエンコーダに対応しています。

NVIDIA VIDEO CODEC SDK を利用したハードウェアデコーダ対応

Windows 10 にて対応済です。

こちらは優先実装としてスロースネットワークス様からの依頼により対応しました。

Intel Media SDK 対応

下調べは終わっており、Windows 10 と ubuntu 18.04 にて対応予定です。優先実装依頼お待ちしています。

サイマルキャスト対応

検討中です。Sora 固有機能ではあるのですが、ハードウェアエンコーダと組み合わせたらとても楽しそうと考えています。

H.265 対応

Safari TP 105 から WebRTC で H.265 が利用可能になりました。コード自体も公開されているため、Momo に乗せることも可能です。優先実装依頼お待ちしています。

AV1 対応

libwebrtc ブランチ 4103 から WebRTC で AV1 が利用可能になりました。Chrome などはまだ有効にしていませんが、libwebrtc を直接使っている momo ではすでに利用可能です。

Sora と組み合わせることで AV1 を利用可能ですので、是非触ってみてください。

test モード Ayame ほぼ互換対応

test モードは Momo 自体がシグナリングサーバになる仕組みですが、そのシグナリングサーバが Ayame ほぼ互換になりました。

そのため test モードに対して ayame モードの momo が接続できるようになります。

Ubuntu 20.04 対応

無事 Ubuntu 20.04 がリリースされましたので、焦らず対応してく予定です。

時雨堂 WebRTC SFU Sora

詳細については 時雨堂 WebRTC SFU Sora 開発ログ をご確認下さい。

方針

マルチストリームでの受信のみが先出しが可能になったため、全ての処理をマルチストリームベースで実現できるようになっため、全てをマルチストリームベースに切り替え始めています。

また録画の安定化、サイマルキャストの録画などやることはたくさんあるため、一つずつクリアしていければと考えています。

E2EE 対応

Chrome M83 から Trial で Insertable Streams が有効になるため、WebRTC SFU を利用した場合でも E2EE 対応が可能になります。

現在 JS SDK にプラグイン的な感じで対応することで、対応予定です。

時雨堂は WebRTC SFU での E2EE 利用を推奨していきます。

リファクタリング

現在は機能追加よりリファクタリングを優先しています。

インターフェースを変更しない設計変更を行っています。リファクタリングの延長線上にありますが、中身の仕組みもごそっと変えたりしています。

バージョン番号変更

YY.MM.RELEASE から YYYY.RELEASE[.FIX] へ変更しました。シンプルに寄せました。

FIX はバグフィックスのみのリリースで「機能変更がない場合のみ利用する」という方針です。

リリースサイクル変更

今までの 4 月と 10 月リリースは Ubuntu を真似していたのですが、 Erlang/OTP と Ubuntu のサイクルを踏まえ 6 月 と 12 月リリースとしました。

設定ファイルの変更

2020.1 から key = value という方式の設定ファイルを導入します。よりわかりやすく、設定ミスを防ぐための仕組みです。

JavaScript SDK の TypeScript 化 と async/await 化

コードやテストの整理、さらに TypeScript 化と async/await 化が完了し開発ブランチにマージしました。これからテストをすすめていきます。

ストリーム停止/再開 API の追加

マルチストリーム利用時に、指定したストリームの受信を停止、再開することができる API を追加しています。

リモート統計情報の取得 API 追加

getStats API で取得可能な統計情報をサーバ側で取得可能にしています。

録画機能の改善

WebRTC での録画は難しく、いろいろな課題があるのですがそれを積極的に改善しています。次のリリースで反映予定です。

H.265 対応

対応済です。Safarit TP 105 以降をで確認可能です。

AV1 対応

対応済みです。Momo 最新版で確認可能です。

mp4 対応

現在録画したファイルの出力は WebM ファイル形式のみですが、今後を考え MP4 へ移行していく予定です。

Sora Unity SDK の NVIDIA 対応と VideoToolbox 対応

Windows 版での NVIDIA VIDEO CODEC SDK (NVENC/NVDEC+CUDA) 対応と macOS での VideoToolbox 対応が完了しています。

Sora 専用自動テストサービスの開発

引き続き作っていっています。これのおかげでバグがいくつか発見されました。1 年で「とりあえず動くもの」までもっていくという方針です。テストサービスを焦って作ってもいいことありません。

毎日コツコツと作っていくのが大事です。実際動かすことで Sora のバグも発見できていますし、デメリットはありません。

品質に投資していきます。

時雨堂 Sora Labo

詳細については 時雨堂 Sora Labo 開発ログをご確認ください。

さくらインターネット様のスポンサードにより、さくらのクラウドを利用できることになりました。そのおかげで転送量を気にすることなく自由に検証してもらえる環境として Sora Labo を提供できています。

  • シグナリングキー設定済みのサンプル
  • 転送量データ
  • 認証ログ
  • 録画ファイル閲覧

Sora の機能を簡単に体験してもらえるような機能を多く提供しておりますので、色々と試していただければと思います。

開発版 Sora の利用

開発版の Sora がデプロイされているため、今後 Sora に実装される機能が利用可能です。

WebRTC React Native WebRTC Kit

React Native for Windows 対応

React Native for Windows の vnext を前提に Windows 向けの WebRTC 対応を進めています。そもそも React Native for Windows 自体の情報がないので手探りで進めています。

2020 年柱には動くものを見せられればと考えています。 feature/windows ブランチenm10kkdxu が調査しています。

DataChannel 対応

対応済です。

Android での onremovetrack 対応

対応済です。

WebRTC Signaling Server Ayame

方針

WebRTC の P2P 向けシグナリングサーバはベンダーロックインフリーなオープンソースがあるべきという方針で開発しています。

詳細については OpenAyame プロジェクトを読んでみてください。

今後

メンテナンスフェーズに入っており、機能追加は予定しておりません。細かい機能改善はちょこちょこやっています。

  • Go 1.14 へアップデート済み
  • Gin binding 機能の利用済み

--

--