ב-ExoPlayer, כל פריט מדיה מיוצג על ידי MediaItem
. עם זאת, בפנים הנגן צריך MediaSource
מופעים כדי להפעיל את התוכן. הנגן יוצר אותם מפריטי מדיה באמצעות MediaSource.Factory
.
כברירת מחדל, הנגן משתמש ב-DefaultMediaSourceFactory
, שיכול ליצור מכונות של הטמעות MediaSource
התוכן הבאות:
DashMediaSource
עבור DASH.SsMediaSource
ל-SmoothStreaming.HlsMediaSource
ל-HLS.ProgressiveMediaSource
לקבצי מדיה רגילים.RtspMediaSource
עבור RTSP.
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
: מיזוג של כמה מקורות מדיה להפעלה בו-זמנית. ברוב המקרים מומלץ לקרוא למבנה עם הערכיםadjustPeriodTimeOffsets
ו-clipDurations
מוגדרים כ-true, כדי לוודא שכל המקורות מתחילים ומסיימים באותו זמן. אם השינוי הזה נעשה כדי להוסיף כתוביות שהועלו בנפרד, עדיף להשתמש במקום זאת ב-MediaItem.SubtitleConfiguration
.ConcatenatingMediaSource2
: מיזוג של כמה מקורות מדיה להפעלה ברצף. מבנה המדיה שגלוי למשתמש חושףTimeline.Window
יחיד, כלומר הוא נראה כמו פריט יחיד. אם השינוי הזה בוצע כדי להפעיל מספר פריטים שלא אמורים להיראות כמו פריט יחיד, עדיף להשתמש במקום זאת בשיטות של ה-API של הפלייליסט, כמוPlayer.addMediaItem
.SilenceMediaSource
: יצירת שתיקה למשך זמן מסוים כדי למלא את הפערים.AdsMediaSource
: הרחבה של מקור מדיה עם יכולות להוספת מודעות בצד הלקוח. פרטים נוספים זמינים במדריך להוספת מודעות.ServerSideAdInsertionMediaSource
: הרחבה של מקור מדיה עם יכולות להוספת מודעות בצד השרת. פרטים נוספים זמינים במדריך להוספת מודעות.