こんにちは、Mirrativ iOSエンジニアの千吉良(ちぎら)です! 先日サンノゼで開催されたWWDC2019に参加してきました。Mirrativ iOSアプリは ReplayKit を利用して配信を行っていて、ReplayKitラボで質問したい項目を事前にまとめてWWDCに臨みました。
今回はReplayKitを軽く紹介し、ReplayKitラボでしてきた質問とその後Appleへ送ったフィードバックについて、公開できると思われる範囲で一部ご紹介します。
ReplayKitの概要
ReplayKitは端末の画面や音声を保存、配信する際に使用するフレームワークです。
iOS10までは、配信を行いたいアプリの中に配信を開始するためのボタンを設置しなければならず、配信できる内容もそのアプリ内にとどまっていました。
iOS11で ReplayKit 2 が登場し、どの画面にいても簡単に好きなアプリをライブストリーミングできるようになりました。
ReplayKitラボでしてきた質問と回答
1. broadcastAnnotated(withApplicationInfo:) で配信時に使用しているアプリの情報が一度しか取得できないのは正常か
broadcastAnnotated(withApplicationInfo:) - RPBroadcastSampleHandler | Apple Developer Documentation
ReplayKitからデータを受け取るためのクラス RPBroadcastSampleHandler
にある関数 broadcastAnnotated(withApplicationInfo:)
では、端末が配信を行っている時に使用しているアプリに関する情報を取得することができます。
Mirrativでは配信者が現在配信しているアプリを設定できるのですが、ユーザー自ら設定するのではなく、こちらで自動的に設定をしてあげられれば便利そうです。(配信アプリの自動設定についての取り組みは、こちらの記事でも紹介されています! 機械学習で配信中の映像からゲームを推定する機能をリリースしました - Mirrativ tech blog )
この関数から取得できる情報をうまく利用したかったのですが、1度の配信につき1回しか情報が取得できないという事象に遭遇したので、その挙動が期待されているものなのかどうかを確認しました。
回答
ユーザーのプライバシー保護の為、一度しか取得できないようになっているのでその挙動は正常。ただ、関数のドキュメントページに説明がないのはイケていないので、フィードバックを送ってほしい。
2. 配信中に音声のデータが取得できなくなることが稀にあるが ReplayKit のドキュメントにある記述と関係があるか
ドキュメントにある記述とは、
ReplayKit | Apple Developer Documentation
にある、
ReplayKit is incompatible with AVPlayer content.
の部分です。配信中に音声のデータが取得できなくなることが稀にあるのですが、状況としてどういうことが考えられるか、ドキュメント内の記述に関係しているかどうかを質問しました。
回答
コンテンツの著作権保護のために、DRMで保護されているようなコンテンツを再生している時は、収録を行わないようになっているはず。もし異なる挙動が見られる場合には、フィードバックを送ってほしい。
3. 音声の出力先を「スピーカー」にしないと配信の音が小さくなってしまう場合がある
音声の出力先を「スピーカー」にしないと配信の音が小さくなってしまう場合があり、ユーザーにスピーカー設定を促しているのですが、設定の手間や難しさもあるのでなにか対処方法はないか質問しました。
回答
最新のOSで試してみてほしい。もし結果が変わっていなかったら、フィードバックを送ってほしい。
4. 稀に理由 (null) と共に配信が止まってしまうことがある
配信用の App Extension 側で何か問題があり明示的に配信を停止する場合(ユーザーがログインしていない場合など)、適当な理由と共に停止のアラートを表示しているようにしているのですが、稀にシステムによって上のアラートが表示されて配信が止まってしまうケースがありました。
ユーザーにとって (null) が見えてしまった場合、アプリのバグに見えてしまい良くない体験になってしまうので、何かしらエラーの理由を付与してもらうなどできないかどうかを質問しました。
回答
App Extension側のプロセスが異常終了した場合、このようなアラートが表示されるかもしれない。プロセスのpidを監視などすれば異常終了は検知できると思うが、開発者にはそれはできない。エラーの理由を付与することはできるかも知れないので、エラーの内容を表示して欲しいというフィードバックを送ってほしい。
5. 配信中にオーバーレイでコンテンツを表示できるようにして欲しい
Mirrativでは視聴者が配信者にコメントを送ることができるのですが、配信者がゲームをプレイしているなどコメントを直接表示できない場所では、プッシュ通知を通じてコメントの表示を行なっています。プッシュ通知だと配信者が見逃してしまうかも知れないので、配信中の画面にオーバーレイで独自のコンテンツを見せられるようにしたい、という要望です。
回答
これはたぶん難しいと思うが、要望の内容が伝わるように画像を添付するなどしてフィードバックを送ってほしい。
Appleにフィードバックを送る
上の回答を見て分かるように、解決して欲しい問題や要望がある場合にはAppleにフィードバックを送りましょう。
フィードバックは以下のページから送ることができます。
https://feedbackassistant.apple.com/welcome
ログイン後の画面を貼ることができないので言葉での説明になってしまうのですが、フィードバックは領域ごとに送ることができて、例えばドキュメントに関するフィードバックは Developer Tools
の Documentation
という領域があるので、そこに要望として送るのがよいでしょう。フレームワークはそのままカテゴリが用意されているので、 iOS
の ReplayKit
を選択して送りましょう。
フィードバックを送る際には、
- ここで話したことも含めて、できるだけ詳細に状況を書く
- 端末のログを添付できる場合は添付する
- 画面上の要素について触れる場合は、関係する画面のスクリーンショットを添付する
など、内容がより伝わるようにしてもらえると嬉しい、とのことでした。
普段からフィードバックを送ろう!
特に ReplayKit のように利用者の少ないフレームワークはフィードバックの数も少ないと思いますので、普段からフィードバックを送っていこうと思いました。この時期だとbetaソフトウェアをインストールしている人も多いと思いますので、不具合を見つけたら積極的に送るようにしたいですね。
おまけ
WWDC2019のようす
try! Swift San Jose
WWDCの最終日に隣の会場で行われる try! Swift San Jose では、メンターをしてきました。
このイベントは SwiftコンパイラやSwift nio, Tensorflow for Swift などにコントリビュートしようという趣旨のワークショップなのですが、Chris LattnerやAppleのエンジニアも顔を出すので、毎年刺激的な場になっています。
We are hiring!
Mirrativ では一緒に開発してくれるエンジニアを募集しています!
体験入社や副業も大歓迎なのでお気軽にどうぞ!