Sora iOS SDK 2020.4 リリース
Sora iOS SDK 2020.4 をリリースしました。バージョンは 2020 年 4 月のリリースではなく 2020 年 4 回目のリリースを表します。
主な変更点
URLSessionWebSocketTask
端末が iOS 13 以降であれば、 WebSocket の処理に標準ライブラリの URLSessionWebSocketTask (iOS 13 で追加された) を使うようにしました。 iOS 12 以前であれば Starscream が使われます。
受信専用の接続時にマイクのパーミッションを要求しないようにする
配信を行う場合、 Sora iOS SDK (libwebrtc) は接続時にカメラとマイクのパーミッションをユーザーに要求します。受信のみならばどちらも不要なのですが、これまでは配信時と同様にパーミッションを要求していました。本バージョンより、受信時はパーミッションの要求を行わないようにしました。詳細は後述します。
libwebrtc におけるマイクのパーミッション
Sora iOS SDK では、マイクと音声の処理をほとんど libwebrtc に依存しています。 libwebrtc (の iOS バインディング) は音声処理に関してカスタマイズする余地がありません。そのためマイクのパーミッションが要求されるタイミングも libwebrtc に任せるほかありません。といっても通常は接続時に要求されるはずで、特に問題ないタイミングだと思われます。
しかし、困ったことに libwebrtc は受信専用の接続でもマイクのパーミッションを要求してしまいます。マイクの扱いに関して libwebrtc (の iOS バインディング) の実装は柔軟性に欠けており、使用するしないに関わらずマイクを初期化してしまいます。不要なパーミッションを要求するおかげで App Store の審査でリジェクトされるケースがあります。
この問題は以前から把握していましたが、 libwebrtc の外側から介入できる問題ではなく、 libwebrtc の実装に手を加えなければならず、かつ音声デバイスの処理という難しさがあり、弊社の開発リソースだと対応が困難で後回しにならざるを得ませんでした。しかし App Store の審査は年々厳しくなっており、もはや libwebrtc 側の修正を待つ余裕がありません。先日リジェクトの報告が寄せられたので早急に何とかするしかなくなりました。何とかできたと思いますが、仕様の変更を含むのでデフォルトの libwebrtc と互換性がなくなりました。
なお、この問題は libwebrtc が原因ですので、 Sora iOS SDK に限らず libwebrtc を使うアプリケーションであれば事情は同じはずです。実は以前から仕様変更の要望が出ていましたが、 WontFix で close されてしまいました (このスレッドの最後に添付されているパッチは残念ながら不完全です) 。 React Native WebRTC でもパッチ開発はメンテナンスが困難という理由で断っています。他の libwebrtc ユーザーの方々はどう解決しているのでしょうかと気になりますが、もし弊社パッチ適用済みの libwebrtc のみを使いたい場合は、以下の Pod Spec リポジトリをご利用ください。
パッチの内容は以下に公開しています。前述の通り仕様が少し異なるので注意してください。
以上です。