פריטי מדיה

ה-API של הפלייליסט מבוסס על MediaItem מופעים, שאפשר ליצור בצורה נוחה. באמצעות MediaItem.Builder. בתוך הנגן, MediaItem מומר ל MediaSource שניתן להפעיל על ידי MediaSource.Factory. ללא הגדרות אישיות, ההמרה הזו מתבצעת על ידי DefaultMediaSourceFactory, שמסוגל לבנות מקורות מדיה מורכבים שתואמים למאפיינים של קובץ מדיה. חלק מהמאפיינים שאפשר להגדיר בפריטי מדיה מפורטים שלמטה.

פריטי מדיה פשוטים

ניתן ליצור פריט מדיה שמכיל רק את ה-URI של השידור באמצעות fromUri שיטה נוחה:

Kotlin

val mediaItem = MediaItem.fromUri(videoUri)

Java

MediaItem mediaItem = MediaItem.fromUri(videoUri);

בכל שאר המקרים, אפשר להשתמש ב-MediaItem.Builder. במשפט הבא, פריט מדיה נוצר עם מזהה ועם מטא-נתונים מצורפים מסוימים:

Kotlin

val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()

Java

MediaItem mediaItem =
    new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();

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

תמונות

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

Kotlin

val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()

Java

MediaItem mediaItem =
    new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();

סיומות קבצים לא סטנדרטיות למדיה דינמית

ExoPlayer מספקת מקורות מדיה מותאמים עבור DASH, HLS ו-HLS. SmoothStreaming. אם ה-URI של פריט מדיה ניתן להתאמה כזה מסתיים ב- מקור המדיה המתאים, נוצר באופן אוטומטי. אם ל-URI יש תוסף לא סטנדרטי או שאין לו תוסף כלל, סוג ה-MIME יכול מוגדרות במפורש כדי לציין את סוג פריט המדיה:

Kotlin

val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()

Java

MediaItem mediaItem =
    new MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build();

לסטרימינג של מדיה מתקדמת אין צורך בסוג MIME.

תוכן מוגן

עבור תוכן מוגן, יש להגדיר את מאפייני ה-DRM של פריט המדיה. המזהה הייחודי האוניברסלי (UUID) הוא חובה, כל שאר המאפיינים הם אופציונליים.

הגדרה לדוגמה להפעלת פריט שמוגן באמצעות Widevine DRM, כאשר ה-URI של הרישיון אינו זמין ישירות במדיה (למשל, בפלייליסט DASH) וכן נדרשים מספר סשנים (למשל עקב רוטציית מפתחות):

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setDrmConfiguration(
      MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
        .setLicenseUri(licenseUri)
        .setMultiSession(true)
        .setLicenseRequestHeaders(httpRequestHeaders)
        .build()
    )
    .build()

Java

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setDrmConfiguration(
            new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
                .setLicenseUri(licenseUri)
                .setMultiSession(true)
                .setLicenseRequestHeaders(httpRequestHeaders)
                .build())
        .build();

בתוך הנגן DefaultMediaSourceFactory יעביר את המאפיינים האלה DrmSessionManagerProvider כדי לקבל DrmSessionManager, ואז שהוחדר ל-MediaSource שנוצר. ניתן לבצע התנהגות DRM התאמה אישית נוספת לצרכים שלכם.

טראקים של כתוביות בהתקנה צידית

כדי לבצע טעינה משנית של טראקים של כתוביות, ניתן להוסיף MediaItem.Subtitle מופעים כאשר פיתוח פריט מדיה:

Kotlin

val subtitle =
  SubtitleConfiguration.Builder(subtitleUri)
    .setMimeType(mimeType) // The correct MIME type (required).
    .setLanguage(language) // The subtitle language (optional).
    .setSelectionFlags(selectionFlags) // Selection flags for the track (optional).
    .build()
val mediaItem =
  MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()

Java

MediaItem.SubtitleConfiguration subtitle =
    new MediaItem.SubtitleConfiguration.Builder(subtitleUri)
        .setMimeType(mimeType) // The correct MIME type (required).
        .setLanguage(language) // The subtitle language (optional).
        .setSelectionFlags(selectionFlags) // Selection flags for the track (optional).
        .build();
MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setSubtitleConfigurations(ImmutableList.of(subtitle))
        .build();

באופן פנימי, DefaultMediaSourceFactory ישתמש ב-MergingMediaSource כדי לשלב את מקור המדיה של התוכן עם SingleSampleMediaSource לכל אחד מהם רצועת כתוביות. ב-DefaultMediaSourceFactory אין תמיכה בהתקנה ממקור לא ידוע כתוביות ל-DASH רב-שלבי.

חיתוך של שידור מדיה

כדי ליצור קליפ של התוכן שאליו מפנה פריט מדיה, יש להגדיר התאמה אישית מיקומי התחלה וסיום:

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setClippingConfiguration(
      MediaItem.ClippingConfiguration.Builder()
        .setStartPositionMs(startPositionMs)
        .setEndPositionMs(endPositionMs)
        .build()
    )
    .build()

Java

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setClippingConfiguration(
            new ClippingConfiguration.Builder()
                .setStartPositionMs(startPositionMs)
                .setEndPositionMs(endPositionMs)
                .build())
        .build();

באופן פנימי, DefaultMediaSourceFactory ישתמש ב-ClippingMediaSource כדי לגלוש ולמקור המדיה של התוכן. יש מאפיינים נוספים של חיתוך. לצפייה לפרטים נוספים, MediaItem.Builder Javadoc.

הוספת מודעה

כדי להוסיף מודעות, יש להגדיר את מאפיין ה-URI של תג מודעה של פריט מדיה:

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())

Java

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build())
        .build();

באופן פנימי, DefaultMediaSourceFactory יקיף את מקור המדיה של התוכן בתוך AdsMediaSource כדי להוסיף מודעות כפי שהוגדר על ידי תג המודעה. כדי שזה יעבוד, לשחקן צריך גם DefaultMediaSourceFactory מוגדרת בהתאם.