מקורות מדיה

ב-ExoPlayer, כל קטע מדיה מיוצג על ידי MediaItem. אבל באופן פנימי, בנגן נדרשים MediaSource מופעים כדי להפעיל את התוכן. הנגן יוצר את הקבצים האלה מפריטי מדיה באמצעות MediaSource.Factory.

כברירת מחדל הנגן משתמש ב-DefaultMediaSourceFactory, שיכול ליצור מופעים של ההטמעות הבאות של תוכן MediaSource:

DefaultMediaSourceFactory יכול גם ליצור מקורות מדיה מורכבים יותר, בהתאם במאפיינים של פריטי המדיה המתאימים. הוא מתואר פרטים על דף פריטי מדיה.

לאפליקציות שנדרשת בהן הגדרות של מקורות מדיה שלא נתמכות על ידי לתצורת ברירת המחדל של הנגן, יש כמה אפשרויות בהתאמה אישית.

התאמה אישית של יצירת מקורות מדיה

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

Kotlin

  val mediaSourceFactory: MediaSource.Factory =
    DefaultMediaSourceFactory(context)
      .setDataSourceFactory(cacheDataSourceFactory)
      .setLocalAdInsertionComponents(adsLoaderProvider, playerView)
  val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()

Java

MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDataSourceFactory(cacheDataSourceFactory)
        .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);
ExoPlayer player =
    new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();

DefaultMediaSourceFactory JavaDoc מתארת את האפשרויות הזמינות בצורה מפורטת יותר.

אפשר גם להחדיר הטמעה מותאמת אישית של MediaSource.Factory, דוגמה לתמיכה ביצירה של סוג מקור מדיה בהתאמה אישית. פרטים של המפעל תתבצע קריאה אל createMediaSource(MediaItem) כדי ליצור מקור מדיה לכל אחד מהם קובץ מדיה שהוא נוסף לפלייליסט.

API של פלייליסט המבוסס על מקור מדיה

בממשק ExoPlayer מוגדרות שיטות נוספות להפעלת פלייליסטים מקורות מדיה ולא פריטי מדיה. כך אפשר לעקוף את את MediaSource.Factory הפנימי של הנגן ומעבירים את המופעים של מקור המדיה אל נגן ישירות:

Kotlin

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources)
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource)

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))

exoPlayer.prepare()
exoPlayer.play()

Java

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources);
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource);

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));

exoPlayer.prepare();
exoPlayer.play();

הרכבה מתקדמת של מקורות מדיה

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

  • ClippingMediaSource: מאפשרת לחתוך מדיה לפי טווח חותמת זמן שצוין. אם זה השינוי היחיד, עדיף להשתמש בו MediaItem.ClippingConfiguration במקום זאת.
  • FilteringMediaSource: מסננים זמינים לטראקים לסוגים שצוינו, עבור לדוגמה, רק חשיפת טראק הווידאו מקובץ שמכיל גם את האודיו וגם וסרטון. אם זה השינוי היחיד, עדיף להשתמש בו במקום זאת, השתמשו בפרמטרים של בחירת מעקב.
  • MergingMediaSource: מיזוג של כמה מקורות מדיה כדי להפעיל אותם במקביל. לחשבון כמעט בכל המקרים, מומלץ לקרוא ל-constructor עם adjustPeriodTimeOffsets ו-clipDurations הוגדרו כ-True כדי לוודא שהכל מקורות מתחילים ומסתיימים באותו זמן. אם השינוי הזה בוצע כדי להוסיף כתוביות בטעינה צדדית, עדיף להשתמש בהן MediaItem.SubtitleConfiguration במקום זאת.
  • ConcatenatingMediaSource2: ממזגים כמה מקורות מדיה כדי להפעיל אותם ברצף. מבנה המדיה הגלוי למשתמש חושף Timeline.Window – נראה כמו פריט אחד. אם בוצע שינוי כדי להפעיל פריטים מרובים שלא אמורים להיראות אחת, עדיף להשתמש ב-methods של פלייליסט, כמו יש גם Player.addMediaItem.
  • SilenceMediaSource: יצירת שקט למשך זמן מוגדר שנמצא שימושי למילוי פערים.
  • AdsMediaSource: הרחבת מקור מדיה באמצעות הוספת מודעות בצד הלקוח יכולות. פרטים נוספים זמינים במדריך להוספת מודעות.
  • ServerSideAdInsertionMediaSource: הרחבת מקור מדיה באמצעות מודעה בצד השרת יכולות של הוספה. פרטים נוספים זמינים במדריך להוספת מודעות.