サーフェス タイプ

このページでは、Media3 で動画再生に使用できるさまざまな種類のサーフェスと、ユースケースに適した種類を選択する方法について説明します。Android の Surface オブジェクトについて詳しくは、グラフィック ドキュメントをご覧ください。

サーフェスを設定する

Player が動画出力を Surface に接続するためのエントリ ポイントは 4 つあります。

キャッシュを削除する方法はいくつかあります。

PlayerView のサーフェス タイプを選択する

PlayerViewsurface_type 属性を使用すると、動画の再生に使用されるサーフェスのタイプを設定できます。使用できる値は次のとおりです。

  • surface_viewSurfaceView
  • texture_viewTextureView
  • spherical_gl_surface_viewSphericalGLSurfaceView)- 球面動画の再生用
  • video_decoder_gl_surface_viewVideoDecoderGLSurfaceView)- 拡張レンダラを使用した動画レンダリング
  • none - 音声再生専用です。サーフェスを作成するとコストがかかるため、サーフェスの作成を回避するために使用します。

ビューが通常の動画再生用である場合は、surface_view または texture_view を使用する必要があります。動画再生において、SurfaceView には TextureView よりも多くのメリットがあります。

  • 多くのデバイスで消費電力を大幅に削減
  • フレーム タイミングの精度が向上し、動画再生がよりスムーズになりました。
  • 対応デバイスで高画質の HDR 動画出力をサポート。
  • DRM 保護されたコンテンツの再生時のセキュア出力のサポート。
  • UI レイヤをアップスケールする Android TV デバイスで、ディスプレイのフル解像度で動画コンテンツをレンダリングする機能。

したがって、可能な場合は TextureView よりも SurfaceView を優先する必要があります。TextureView は、SurfaceView でニーズを満たせない場合にのみ使用してください。たとえば、Android 7.0(API レベル 24)より前のバージョンでは、次の注で説明するように、動画サーフェスのスムーズなアニメーションやスクロールが必要になります。この場合、SDK_INT が 24(Android 7.0)未満の場合は TextureView を使用し、それ以外の場合は SurfaceView を使用することが望ましいです。

Compose でサーフェス タイプを選択する

Compose では、相互運用ソリューションは AndroidView コンポーザブルを使用して SurfaceViewTextureView をラップします。これに対応する 2 つのコンポーザブルは、androidx.compose.foundationAndroidExternalSurfaceAndroidEmbeddedExternalSurface です。ただし、これらのプロキシ クラスは、基盤となるビューへのアクセスを制限する API サーフェスを提供します。これらのビューは、Player がサーフェスのライフサイクル全体(作成とサイズの更新)を処理するために必要です。

media3-ui-compose モジュールには、Player をライフサイクルを認識した方法で Surface にリンクするコンポーザブル ContentFramePlayerSurface があります。この場合のサーフェス タイプは次のとおりです。

  • androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEW
  • androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW

none という型はありません。これは、コンポーザブルを Compose UI ツリーに含めないことに対応するためです。