בדף הזה מתוארים הסוגים השונים של משטחים שאפשר להשתמש בהם להפעלת סרטונים באמצעות Media3, ואיך בוחרים את הסוג המתאים לתרחיש לדוגמה. למידע נוסף על אובייקטים של Surface ב-Android, אפשר לעיין במסמכי העזרה בנושא גרפיקה.
בחירת סוג פלטפורמה ל-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.
- היכולת ליצור עיבוד (רנדור) של תוכן וידאו ברזולוציה המלאה של המסך במכשירי Android TV שמגדילים את הרזולוציה של שכבת ממשק המשתמש.
לכן, במידת האפשר, עדיף להשתמש ב-SurfaceView
במקום ב-TextureView
.
צריך להשתמש ב-TextureView
רק אם SurfaceView
לא עונה על הצרכים שלכם. דוגמה לכך היא כשדרושות אנימציות חלקות או גלילה חלקה של שטח הסרטון בגרסאות Android ישנות יותר מ-7.0 (רמת API 24), כפי שמתואר בהערות הבאות. במקרה כזה, עדיף להשתמש ב-TextureView
רק כאשר הערך של SDK_INT
קטן מ-24 (Android 7.0), וב-SurfaceView
במקרים אחרים.
בחירת סוג משטח ב-Compose
ב-Compose, פתרון ה-interop משתמש ב-AndroidView
Composable כדי לעטוף את SurfaceView
ואת TextureView
. שתי ה-Composables שתואמות לזה הן AndroidExternalSurface
ו-AndroidEmbeddedExternalSurface
.
המודול ui-compose
של Media3 מספק רכיב Composable מסוג PlayerSurface
שמקשר את Player
ל-Surface
באופן שמתחשב במחזור החיים. סוגי המשטחים במקרה הזה הם:
SURFACE_TYPE_SURFACE_VIEW
(למעשהAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(בפועלAndroidEmbeddedExternalSurface
)
אין סוג none
, כי זה יתאים לאי הכללה של PlayerSurface
בעץ של ממשק המשתמש של Compose.