סוגי משטחים

בדף הזה מתוארים הסוגים השונים של פלטפורמות שאפשר להשתמש בהן להפעלת סרטונים באמצעות Media3, ומוסבר איך לבחור את הסוג המתאים לתרחיש השימוש שלכם. מידע נוסף על אובייקטים של Surface ב-Android זמין במסמכי הגרפיקה.

הגדרת הפלטפורמה

יש ארבע נקודות כניסה ל-Player כדי לחבר את פלט הווידאו שלו ל-Surface:

יש גם דרכים שונות לנקות את המטמון:

בחירת סוג הפלטפורמה עבור PlayerView

המאפיין surface_type של PlayerView מאפשר להגדיר את סוג הפלטפורמה שמשמשת להפעלת הסרטון. הערכים המותרים הם:

  • surface_view (SurfaceView)
  • texture_view (TextureView)
  • spherical_gl_surface_view (SphericalGLSurfaceView) – להפעלת סרטון ב-360°
  • 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, פתרון ה-Interop משתמש ב-AndroidView Composable כדי לעטוף את SurfaceView ואת TextureView. שני רכיבי ה-Composable שמתאימים לכך הם AndroidExternalSurface ו-AndroidEmbeddedExternalSurface מתוך androidx.compose.foundation. עם זאת, מחלקות ה-proxy האלה מספקות ממשק API שמגביל את הגישה לתצוגות הבסיסיות. הצפיות האלה נדרשות ל-Player כדי לטפל במחזור חיים מלא של פלטפורמת הפרסום (יצירה ועדכוני גודל).

במודול media3-ui-compose, אפשר למצוא את הקומפוזיציות ContentFrame ו-PlayerSurface שמקשרות את Player אל Surface באופן שמודע למחזור החיים. סוגי הפלטפורמות במקרה הזה הם:

  • androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEW
  • androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW

אין סוג none, כי הוא מתאים למצב שבו הרכיב הקומפוזבילי לא נכלל בעץ ממשק המשתמש של Compose.