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