このページでは、Media3 での動画再生に使用できるサーフェスの種類と、ユースケースに適したタイプを選択する方法について説明します。Android の Surface オブジェクトの詳細については、グラフィックのドキュメントをご覧ください。
PlayerView のサーフェス タイプを選択する
PlayerView
の surface_type
属性を使用すると、動画の再生に使用するサーフェスのタイプを設定できます。使用できる値は次のとおりです。
surface_view
(SurfaceView
)texture_view
(TextureView
)spherical_gl_surface_view
(SphericalGLSurfaceView
)- 球状動画の再生video_decoder_gl_surface_view
(VideoDecoderGLSurfaceView
)- 拡張機能レンダラを使用した動画レンダリング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
コンポーザブルを使用して SurfaceView
と TextureView
をラップします。これに相当する 2 つのコンポーザブルは、AndroidExternalSurface
と AndroidEmbeddedExternalSurface
です。
Media3 ui-compose
モジュールは、ライフサイクルを意識した方法で Player
を Surface
にリンクする PlayerSurface
コンポーザブルを提供します。この場合のサーフェス タイプは次のとおりです。
SURFACE_TYPE_SURFACE_VIEW
(実質的にはAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(実質的にAndroidEmbeddedExternalSurface
)
タイプ none
はありません。これは、Compose UI ツリーに PlayerSurface
が含まれていないことに対応しています。