本頁面說明可用於 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
。與 TextureView
相比,SurfaceView
在影片播放方面具有許多優點:
- 在許多裝置上降低耗電量。
- 更準確的影格時間,可讓影片播放更流暢。
- 在支援的裝置上支援更高品質的 HDR 影片輸出。
- 播放受 DRM 保護的內容時,支援安全輸出功能。
- 在 Android TV 裝置上以 UI 層升級功能,以顯示器的完整解析度算繪影片內容。
因此,請盡可能使用 SurfaceView
而非 TextureView
。只有在 SurfaceView
無法滿足需求時,才應使用 TextureView
。舉例來說,如果您需要在 Android 7.0 (API 級別 24) 之前的版本中,以流暢的動畫或捲動方式顯示影片介面,請參閱以下附註。在這種情況下,建議只在 SDK_INT
小於 24 (Android 7.0) 時使用 TextureView
,否則使用 SurfaceView
。
在 Compose 中選擇介面類型
在 Compose 中,Interop 解決方案會使用 AndroidView
可組合函式包裝 SurfaceView
和 TextureView
。對應的兩個可組合項為 AndroidExternalSurface
和 AndroidEmbeddedExternalSurface
。
Media3 ui-compose
模組提供 PlayerSurface
可組合項,以生命週期感知方式將 Player
連結至 Surface
。此案例中的途徑類型如下:
SURFACE_TYPE_SURFACE_VIEW
(實際上是AndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(實際上是AndroidEmbeddedExternalSurface
)
沒有 none
類型,因為這會導致 Compose UI 樹狀結構中不包含 PlayerSurface
。