توضّح هذه الصفحة الأنواع المختلفة من مساحات العرض التي يمكن استخدامها لتشغيل الفيديو باستخدام Media3، وكيفية اختيار النوع المناسب لحالة الاستخدام. لمزيد من المعلومات حول عناصر Surface في Android، يمكنك الاطّلاع على مستندات الرسومات هذه.
ضبط مساحة العرض
تتوفّر أربع نقاط دخول للوصلة 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 بجودة أعلى على الأجهزة المؤهَّلة
- إمكانية إخراج المحتوى المحمي بموجب إدارة الحقوق الرقمية بشكل آمن
- إمكانية عرض محتوى الفيديو بكامل دقة الشاشة على أجهزة Android TV التي تزيد من دقة طبقة واجهة المستخدم
لذلك، يجب تفضيل SurfaceView على TextureView كلما أمكن ذلك.
يجب استخدام TextureView فقط إذا لم يلبي SurfaceView احتياجاتك. أحد الأمثلة على ذلك هو الحالات التي تتطلّب عرض رسوم متحركة سلسة أو تمرير سطح الفيديو قبل الإصدار 7.0 من نظام التشغيل Android (المستوى 24 من واجهة برمجة التطبيقات)، كما هو موضّح في الملاحظات التالية. في هذه الحالة، من الأفضل استخدام TextureView فقط عندما تكون قيمة SDK_INT أقل من 24 (Android 7.0)، واستخدام SurfaceView في الحالات الأخرى.
اختيار نوع سطح في Compose
في Compose، يستخدم حلّ التشغيل التفاعلي العنصر المركّب AndroidView لتضمين SurfaceView وTextureView. إنّ العنصرَين القابلَين للإنشاء اللذين يتوافقان مع ذلك هما AndroidExternalSurface وAndroidEmbeddedExternalSurface من androidx.compose.foundation. ومع ذلك، توفّر فئات الوكيل واجهة برمجة تطبيقات تحدّ من إمكانية الوصول إلى طرق العرض الأساسية. وتحتاج Player إلى طرق العرض هذه للتعامل مع دورة حياة كاملة للعرض (الإنشاء وتعديلات الحجم).
في الوحدة media3-ui-compose، يمكنك العثور على عناصر ContentFrame وPlayerSurface البرمجية القابلة للإنشاء التي تربط Player بـ Surface بطريقة تراعي مراحل النشاط. أنواع الأسطح في هذه الحالة هي:
androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEWandroidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
لا يوجد نوع none، لأنّ ذلك سيؤدي إلى عدم تضمين العنصر القابل للإنشاء في شجرة واجهة المستخدم Compose.