این صفحه انواع مختلف سطوحی را که میتوانند برای پخش ویدیو با Media3 استفاده شوند، و نحوه انتخاب نوع مناسب برای مورد استفاده شما را شرح میدهد. برای کسب اطلاعات بیشتر در مورد اشیاء سطحی در اندروید، این مستندات گرافیکی را مطالعه کنید.
سطح را تنظیم کنید
چهار نقطه ورودی برای اتصال خروجی ویدیوی Player به برخی از Surface وجود دارد:
-
void setVideoSurface(@Nullable Surface surface) -
void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) -
void setVideoSurfaceView(@Nullable SurfaceView surfaceView) -
void setVideoTextureView(@Nullable TextureView textureView)
همچنین روشهای مختلفی برای پاک کردن آن وجود دارد:
-
void clearVideoSurface() -
void clearVideoSurface(@Nullable Surface surface) -
void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) -
void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) -
void clearVideoTextureView(@Nullable TextureView textureView)
یک نوع سطح برای PlayerView انتخاب کنید
ویژگی surface_type از PlayerView به شما امکان میدهد نوع سطح مورد استفاده برای پخش ویدیو را تنظیم کنید. مقادیر مجاز عبارتند از:
-
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.
- قابلیت رندر کردن محتوای ویدیویی با وضوح کامل نمایشگر در دستگاههای اندروید تیوی که لایه رابط کاربری را ارتقا میدهد.
بنابراین، در صورت امکان، SurfaceView باید بر TextureView ترجیح داده شود. TextureView فقط در صورتی باید استفاده شود که SurfaceView نیازهای شما را برآورده نکند. یک مثال، جایی است که انیمیشنهای روان یا پیمایش سطح ویدیو قبل از اندروید ۷.۰ (سطح API ۲۴) مورد نیاز است، همانطور که در یادداشتهای بعدی توضیح داده شده است. در این مورد، ترجیحاً فقط زمانی TextureView استفاده شود که SDK_INT کمتر از ۲۴ باشد (اندروید ۷.۰) و در غیر این صورت SurfaceView استفاده شود.
یک نوع سطح را در Compose انتخاب کنید
در Compose، راهکار interop از AndroidView Composable برای پوشش SurfaceView و TextureView استفاده میکند. دو Composable که با آن مطابقت دارند عبارتند از AndroidExternalSurface و AndroidEmbeddedExternalSurface از androidx.compose.foundation . با این حال، این کلاسهای پروکسی یک سطح API ارائه میدهند که دسترسی به نماهای زیرین را محدود میکند. این نماها توسط Player برای مدیریت چرخه حیات کامل سطح (ایجاد و بهروزرسانیهای اندازه ) مورد نیاز هستند.
در ماژول media3-ui-compose ، میتوانید Composableهای ContentFrame و PlayerSurface را پیدا کنید که Player را به روشی آگاه از چرخه حیات به یک Surface پیوند میدهند. انواع سطوح در این مورد عبارتند از:
-
androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEW -
androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
هیچ نوع none وجود ندارد، زیرا این به معنای عدم گنجاندن composable در درخت رابط کاربری Compose شما خواهد بود.