Bu sayfada, Media3 ile video oynatma için kullanılabilecek farklı yüzey türleri ve kullanım alanınız için doğru türü nasıl seçeceğiniz açıklanmaktadır. Android'deki Surface nesneleri hakkında daha fazla bilgi edinmek için bu grafik belgesini okuyun.
Yüzeyi ayarlama
Player cihazının video çıkışını bir Surface cihazına bağlamak için dört giriş noktası vardır:
void setVideoSurface(@Nullable Surface surface)void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void setVideoSurfaceView(@Nullable SurfaceView surfaceView)void setVideoTextureView(@Nullable TextureView textureView)
Ayrıca, temizlemenin de farklı yolları vardır:
void clearVideoSurface()void clearVideoSurface(@Nullable Surface surface)void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void clearVideoSurfaceView(@Nullable SurfaceView surfaceView)void clearVideoTextureView(@Nullable TextureView textureView)
PlayerView için yüzey türü seçme
PlayerView öğesinin surface_type özelliği, video oynatma için kullanılan yüzeyin türünü ayarlamanıza olanak tanır. İzin verilen değerler şunlardır:
surface_view(SurfaceView)texture_view(TextureView)spherical_gl_surface_view(SphericalGLSurfaceView): Küresel video oynatma içinvideo_decoder_gl_surface_view(VideoDecoderGLSurfaceView): Uzantı oluşturucular kullanarak video oluşturmak içinnone: Yalnızca sesli oynatma için kullanılır ve yüzey oluşturmaktan kaçınmak için kullanılmalıdır. Yüzey oluşturmak maliyetli olabilir.
Görünüm normal video oynatma içinse surface_view veya texture_view kullanılmalıdır. SurfaceView, video oynatma için TextureView'a
göre çeşitli avantajlar sunar:
- Birçok cihazda güç tüketimi önemli ölçüde düşürülür.
- Daha doğru kare zamanlaması sayesinde videolar daha akıcı oynatılır.
- Uygun özellikli cihazlarda daha yüksek kaliteli HDR video çıkışı desteği sunar.
- DRM korumalı içerik oynatılırken güvenli çıkış desteği sunar.
- Kullanıcı arayüzü katmanını yükselten Android TV cihazlarda video içeriğini ekranın tam çözünürlüğünde oluşturma özelliği sunar.
Bu nedenle, mümkün olduğunda SurfaceView, TextureView'a tercih edilmelidir.
TextureView yalnızca SurfaceView ihtiyaçlarınızı karşılamıyorsa kullanılmalıdır. Aşağıdaki notlarda açıklandığı gibi, Android 7.0'dan (API düzeyi 24) önceki sürümlerde video yüzeyine akıcı animasyon eklenmesi veya yüzeyin akıcı kaydırılması gerektiği durumlar örnek gösterilebilir. Bu durumda, yalnızca SDK_INT 24'ten küçük olduğunda (Android 7.0) TextureView'ın kullanılması, aksi takdirde SurfaceView'ın kullanılması tercih edilir.
Compose'da yüzey türü seçme
Compose'da birlikte çalışabilirlik çözümü, SurfaceView'ı ve TextureView'ı sarmalamak için AndroidView composable'ı kullanır. Buna karşılık gelen iki composable, androidx.compose.foundation içindeki AndroidExternalSurface ve AndroidEmbeddedExternalSurface'tır. Ancak bu proxy sınıfları, temel görünümlerin erişimini sınırlayan bir API yüzeyi sağlar. Bu görünümler, Player tarafından yüzeyin tam yaşam döngüsünü (oluşturma ve boyut güncellemeleri) yönetmek için gereklidir.
media3-ui-compose modülünde, ContentFrame ve PlayerSurface composable'larını bulabilirsiniz. Bu composable'lar, Player öğesini yaşam döngüsüne duyarlı bir şekilde Surface öğesine bağlar. Bu durumda yüzey türleri şunlardır:
androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEWandroidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
Composable'ı Compose kullanıcı arayüzü ağacınıza dahil etmemeye karşılık geleceğinden none şeklinde bir tür yoktur.