Mirrativ Tech Blog

株式会社ミラティブの開発者(バックエンド,iOS,Android,Unity,機械学習,インフラ, etc.)によるブログです

Android12でのピクチャー イン ピクチャーの改善をR&Dしました

 こんにちは。エンジニアのshogo4405です。普段はAndroidの開発を行いながらときどきiOSの開発を行なっています。本稿では、Android12で改善したピクチャー イン ピクチャーをMirrativに導入できないか調査した内容を紹介していきます。

はじめに

 Mirrativのクライアントチームでは、四半期更新でOKRを運用しています。また、AndroidチームのOKRの取り組みの一環としてAndroid 12でPIPが改善されているので試してみたいなという話になり試してみました。

 Android12での、PIPの改善のポイントは次の通りです。

  1. ジェスチャー ナビゲーションでPIP モードにスムーズに遷移するための新しい API フラグ

  2. 動画以外のコンテンツのシームレスなサイズ変更を無効にする新しい API フラグ

  3. PIP モードの終了時のスムーズなアニメーション

  4. 新しいジェスチャーのサポート


developer.android.com

ジェスチャー ナビゲーションで PIP モードにスムーズに遷移するための新しい API フラグ


f:id:shogo4405:20220302181351g:plain:left

 アプリケーションが、バックグラウンドに遷移したときにPIP表示するためのフラ グのようです。試しにActivityのonCreateにセットしてみました。

override fun onCreate(savedInstanceState: Bundle?) {     
setPictureInPictureParams(
   PictureInPictureParams.Builder()
   .setAutoEnterEnabled(true)
   .build())
}

 なるほど。いい感じのアニメーションで有名なVOD動画再生アプリのユーザー体験を実現できそうです。

動画以外のコンテンツのシームレスなサイズ変更を無効

 MirrativでのPIP表示の主なコンテンツは、動画になります。一方で、PIP表示時には、1行コメントを表示するようにしています。そのため動画以外のコンテンツも取り扱っています。このseamlessResizeEnabledのON/OFFをかえて。ピンチイン・アウトのアニメーションを見比べてみました。確かに、スムーズなアニメーションになっているように感じました。

このフラグにより、PIP ウィンドウで動画以外のコンテンツのサイズを変更する際に、よりスムーズなクロスフェード アニメーションを提供できるようになりました。

  setPictureInPictureParams(new PictureInPictureParams.Builder()
          .setSeamlessResizeEnabled(false)
          .build());

PIPモードの終了時のスムーズなアニメーション

 終了時のスムーズなアニメーションとあるのでPIPを終了したときのアニメーションに注目をして調査をしていました。スムーズなアニメーションと記載がありますがさっぱりわかりませんでした。ぜひコメントいただきたいです。

 しかしながら、sourceRectHintを設定することで、PIPを開始したときに一瞬黒くなることが解消するのがわかりました。

val sourceRectHint = Rect()
playerView.getGlobalVisibleRect(sourceRectHint)
  setPictureInPictureParams(
    PictureInPictureParams.Builder()
      .setSourceRectHint(sourceRectHint)
      .build()
 )
適用前 適用後
f:id:shogo4405:20220303155957g:plain f:id:shogo4405:20220303155935g:plain

新しいジェスチャーのサポート


 こちらは、Android12で標準的に動作します。特にながら作業での退避は便利ですね。ピンチインで、PIP画面が小さく。ピンチアウトで大きくなりました。

退避 ピンチイン ピンチアウト
f:id:shogo4405:20220302171933p:plain:w200 f:id:shogo4405:20220302172133p:plain:w200 f:id:shogo4405:20220302171908p:plain:w200

まとめ

 Android12でのピクチャー イン ピクチャーで追加されたプロパティーをまとめると次の表のようになります。

フラグ 効果
autoEnterEnable デフォルトfalse。trueに設定することで、アプリをバックグラウンドにしたときに自動的にPIP状態へ遷移
seamlessResizeEnabled デフォルトtrue。falseにすることでUIがついている場合にアニメーションを抑制
sourceRectHint PIPを開始したときに一瞬黒くなることの解消

この後の展望

 本研究結果よりAndroid12のPIPの改善を導入することで次のメリットが得られると考えます。

  1. バックグラウンド時にPIPモードへ自動的に移行することで、サービスでの視聴時間の向上に寄与
  2. アニメーションが良くなることで、体験上のストレスの低減見込

 プロダクト開発はリリースしてからがスタートです。 リリース後には、別の不具合が発生していないか確認のもちろんのこと。本仮説が妥当であるか、分析チームと協力しながら、プロダクトの定量面や定性面での分析活動を行いフィードバックを元にプロダクト改善を行なっています。今回の改善内容が、ユーザーの皆様へ提供できるように邁進していきます。

We are hiring!

 ミラティブでは、一緒にアプリを作ってくれるエンジニアを募集中です!また、分析してくれるメンバーも募集しております。気軽にご連絡ください!

www.mirrativ.co.jp