Halaman ini menjelaskan berbagai jenis platform yang dapat digunakan untuk pemutaran video dengan Media3, dan cara memilih jenis yang tepat untuk kasus penggunaan Anda. Untuk mengetahui lebih lanjut objek Surface di Android, baca dokumentasi grafis ini.
Menetapkan platform
Ada empat titik entri bagi Player untuk menghubungkan output videonya ke beberapa
Surface:
void setVideoSurface(@Nullable Surface surface)void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void setVideoSurfaceView(@Nullable SurfaceView surfaceView)void setVideoTextureView(@Nullable TextureView textureView)
Ada juga berbagai cara untuk menghapusnya:
void clearVideoSurface()void clearVideoSurface(@Nullable Surface surface)void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void clearVideoSurfaceView(@Nullable SurfaceView surfaceView)void clearVideoTextureView(@Nullable TextureView textureView)
Pilih jenis platform untuk PlayerView
Atribut surface_type dari PlayerView memungkinkan Anda menetapkan jenis platform
yang digunakan untuk pemutaran video. Nilai yang diizinkan adalah:
surface_view(SurfaceView)texture_view(TextureView)spherical_gl_surface_view(SphericalGLSurfaceView) - untuk pemutaran video sferisvideo_decoder_gl_surface_view(VideoDecoderGLSurfaceView) - rendering video menggunakan perender ekstensinone- yang hanya untuk pemutaran audio dan harus digunakan untuk menghindari pembuatan permukaan karena hal itu dapat memakan biaya yang besar.
Jika tampilan untuk pemutaran video reguler, surface_view atau texture_view
harus digunakan. SurfaceView memiliki sejumlah manfaat dibandingkan TextureView
untuk pemutaran video:
- Menurunkan konsumsi daya secara signifikan di banyak perangkat.
- Waktu frame yang lebih akurat, sehingga pemutaran video lebih lancar.
- Dukungan untuk output video HDR berkualitas lebih tinggi di perangkat yang kompatibel.
- Dukungan untuk output yang aman saat memutar konten yang dilindungi DRM.
- Kemampuan untuk merender konten video pada resolusi penuh layar di perangkat Android TV yang meng-upscale lapisan UI.
Oleh karena itu, SurfaceView harus lebih diutamakan daripada TextureView jika memungkinkan.
TextureView hanya boleh digunakan jika SurfaceView tidak memenuhi kebutuhan Anda. Salah satu contohnya adalah saat animasi atau scrolling yang lancar pada permukaan video diperlukan sebelum Android 7.0 (level API 24), seperti yang dijelaskan dalam catatan berikut. Untuk
kasus ini, sebaiknya gunakan TextureView hanya jika SDK_INT kurang
dari 24 (Android 7.0) dan SurfaceView jika tidak.
Memilih jenis platform di Compose
Di Compose, solusi interop menggunakan Composable AndroidView untuk memaketkan
SurfaceView dan TextureView. Dua Composable yang sesuai dengan
adalah AndroidExternalSurface dan AndroidEmbeddedExternalSurface dari
androidx.compose.foundation. Namun, class proxy ini menyediakan permukaan API yang membatasi akses tampilan pokok. Tampilan tersebut diperlukan oleh
Player untuk menangani siklus proses penuh permukaan (pembuatan dan pembaruan ukuran).
Dalam modul media3-ui-compose, Anda dapat menemukan composable ContentFrame dan
PlayerSurface yang menautkan Player ke Surface dengan cara
yang kompatibel dengan siklus proses. Jenis permukaan dalam hal ini adalah:
androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEWandroidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
Tidak ada jenis none, karena jenis tersebut akan sesuai dengan tidak menyertakan
composable dalam hierarki UI Compose Anda.