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

2020 年 01 月版

V
shiguredo
10 min readJan 25, 2020

--

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

これはできるだけ毎月書いていこうと考えています。WebRTC に興味がある方は読んでみていただけると嬉しいです。

WebRTC React Native WebRTC Kit

libwebrtc M79 対応

feature/m79 ブランチで M79 の対応を進めています。enm10k と CTO が対応しています。

React Native for Windows 対応

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

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

WebRTC Signaling Server Ayame

方針

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

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

リライト

リライトしたものを公開し Ayame Lite でも運用しています。色々と変更したい点が多くなってきたためリライトという形をとりました。インターフェースは可能な限り変更していませんので、SDK 側の影響はとても少ないです。他にも SDK 側も終了処理やサンプルを書き直したりしています。

リリース

2 月末までには 2020.1 として公開予定です。

iOS / Android SDK

こちらは、一旦開発停止とさせてもらいました。今後の再開も今の所予定していません。開発優先度が高くないこと、メンテナンスコストを考えると今のタイミングでは難しいことが理由です。

Unity SDK

Unity もデータチャネルを利用した 1:1 で生きる場面があるという事で、Unity SDK を検討しています。

時雨堂 Ayame Plus (旧 WebRTC シグナリングサーバ Ayame Lite)

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

Ayame を利用したサービスです。利益を目的としたサービスではないため、無料で利用できます。

GitHub ID を利用したルーム ID への認証や TURN サーバ、認証ログの提供をしています。とにかく簡単に使えるわりに、必要なものが揃っているを目指して進めています。

正式リリースに向けて

正式リリースに向けて Ayame Lite から Ayame Plus へと作り直しています。といっても内部的な変更であって大きいのと言えば「利用規約への同意」がないと利用できないくらいです。

正式リリースは 3 月末を目標にすすめています。

WebRTC Native Client Momo

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

方針

WebRTC Native Client Momo の大きな方針はビルドの簡易化、libwebrtc への追従がメインです。様々な OS やアーキテクチャーに対応する必要がありますが、それらを簡易化し、誰もが簡単にビルドできるようにすることを目的としています。

また libwebrtc の最新バージョンに追従することで最新の技術を積極的に使えます。

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

NVIDIA Jetson 推奨

Jetson Nano が価格的差は少しありますが安定的に 4K 配信できることもあり、Jetson シリーズでの利用を推奨していこうと考えています。

2020 年 3 月には Jetson Nano と同じサイズで高スペックな Jetson Xavier NX が発売されます。こちらは VP9 HWA を搭載しており、 4K の配信が可能になるため、かなりのゲームチェンジャー基盤です。

時雨堂としては Jetson Xavier NX を本命に色々改善できればと考えています。

ウェブサイト公開

2020.1 公開

今回からバージョン番号が大きく変わっていますので要注意です。

データチャネルとシリアルポート読み書き

SDL を使って Momo 自体で音声や映像の受信に続いて、シリアルポートの読み書きをデータチャネル経由でできる機能を追加しました。

https://i.gyazo.com/c1fb6696963e044a44576b1ddeffd0cb.gif

NVIDIA VIDEO CODEC SDK 対応

検討中です。Windows と Linux で利用可能にする予定で検討しています。

また NVDEC に対応することで、 SDL 利用時の再生負荷を下げたいと考えています。

Windows 対応の OSS 化

検討中です。Windows ビルドツールが売れたおかげで、Momo への投資をガッツリ行えました。感謝として OSS での公開を予定しています。

サイマルキャスト対応

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

時雨堂 WebRTC SFU Sora

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

方針

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

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

バージョン番号変更

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

リリースサイクル変更

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

設定ファイルの変更

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

JavaScript SDK の TypeScript 化

コードやテストの整理、さらに TypeScript 化を進めています。安定しており多くのお客様に利用いただいている SDK ということもあり、慎重に進めています。Sora 2020.1 公開時に対応予定です。

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

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

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

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

録画機能の改善

録画は難しく、いろいろな課題があるのですがそれを積極的に改善知ていく予定です。

FlexFEC 対応

RFC が出たということもあり、Chrome 側での対応も動きがありましたので、対応検討中です。

AV1 対応

一通り対応済みです。

mp4 対応

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

時雨堂 Sora Labo

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

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

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

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

アクセストークン

シグナリングキーとは別にアクセストークンを発行できるようにする予定です。これは「サンプルアプリを他の人にも試してもらいやすくする」というのを目的としています。

Sora Labo から Sora へのフィードバック

TURN-TCP / TURN-TLS のみを利用する仕組みなどを Sora の公式として提供する予定です。

Azuki プロジェクト

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

Momo をベースにした常時配信を前提としたソフトウェアです。拠点間を繋ぎっぱなしにして使うことをイメージしています。

4K カメラ、4K 液晶、 NVIDIA Jetson を用意することで遠く離れた拠点が近くにいるように感じられる事を目指します。

非商用であれば無料で利用できますので、企業でも気軽に使っていただくことを可能にします。

OpenKomugi プロジェクト

詳細については OpenKomugi プロジェクトをご確認ください。

OpenKomugi プロジェクトは WebRTC 配信ソフトウェアを開発し、オープンソースで公開するというプロジェクトです。

React Native を利用したになっているため、まずは React Native for Windows の WebRTC 対応を進めています。中長期的なプロジェクトです。

--

--