Sora Android SDK 1.8.1 リリース

Shunichi Shinohara
shiguredo
Published in
4 min readApr 19, 2019

時雨堂の WebRTC SFU Sora 向け Android SDK の 1.8.1 をリリースしました。マイナーリリースということもあり、リリースの目玉は特にありませんので、いくつかの変更点、追加機能について落ち穂拾い的に触れていくエントリです。

まずは追加機能として、カメラの解像度を維持するオプションを追加しました。WebRTC ではビットレートに応じてフレームレートや解像度を動的に調整しています。これは Sora Android SDK ではなくて libwebrtc が全部やってくれます。ありがたいことです。例えば、通信している途中で使えるビットレートが低すぎる状態になった場合、デフォルトの挙動では映像のフレームレートを維持するほうを優先度し、解像度を下げて低ビットレートでも映像を送り続けます。

libwebrtc にある Capturer インターフェースにはスクリーン共有かどうかのフラグがあり、スクリーン共有の場合は解像度を優先するという動作に切り替わります。そこで、Java/Kotlin 層で Capturer をラップしてこのフラグを騙すことでカメラからの映像でも解像度維持を優先できるようにしました。

次に、地味な話ですが、シグナリングパラメータの改善を行いました。Sora への connect メッセージには metadata フィールドでクライアントから任意の情報を送信できます。これは認証を外部で行う場合などに利用できます。このフィールドが 1.8.0 までは String 決め打ちだったのですが、Any に変更しました。文字列を渡したときの動作は後方互換性を維持しています。

JSON ライブラリには Gson を使っていますので、文字列、数値、Map や List で構成されたオブジェクトを metadata に渡すと認証サーバでは JSON で受け取ることが出来るようになります。

また、Sora 19.04.0 で追加された機能への対応として、connect 時の client ID 指定と、ネットワークの安定度を通知するメッセージの追加があります。詳しくは Sora のリリースノートを参照してください。

みっつめに、映像のエンコーダ/デコーダのファクトリを指定できるインターフェースを実験的に追加しました。

libwebrtc には、根幹となる PeerConnection の周辺に、前述の Capturer インターフェースとエンコーダ/デコーダのインターフェースがあり、環境依存部分を吸収できるようになっています。これまでは libwebrtc のデフォルトのエンコーダ/デコーダを利用していたのですが、独自のエンコーダを利用することも出来るように EncoderFactory, DecoderFactory を設定するインターフェースを追加しました。あまり使う機会はないかもしれませんし、へんなデバイスにあたると必要になるかもしれません。

最後になりますが、Kotlin の stdlib 依存を変更しました。kotlin-stdlib-jdk7 依存だったものを kotlin-stdlib にしています。 Sora Android SDK は libwebrtc に合わせて minSdkVersion が 16 であり、安全のため変更しました。

最後の最後に、libwebrtc を 73.10.1 に上げました。native (C/C++) はいろいろと変わり続けていますが、特記事項はないくらい Android 部分はあまり変化がないですね。

解像度維持オプションや client ID 指定機能は本 SDK のサンプルアプリケーションの Video chat に実装されています。Sora をお持ちの方はビルドしてインストールすれば試すことが可能です。

以上、Sora Android SDK 1.8.1 のつらつらとしたリリースメモでした。

--

--