ב-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
: מיזוג של כמה מקורות מדיה כדי להפעיל אותם במקביל. לחשבון כמעט בכל המקרים, מומלץ לקרוא ל-constructor עםadjustPeriodTimeOffsets
ו-clipDurations
הוגדרו כ-True כדי לוודא שהכל מקורות מתחילים ומסתיימים באותו זמן. אם השינוי הזה בוצע כדי להוסיף כתוביות בטעינה צדדית, עדיף להשתמש בהןMediaItem.SubtitleConfiguration
במקום זאת.ConcatenatingMediaSource2
: ממזגים כמה מקורות מדיה כדי להפעיל אותם ברצף. מבנה המדיה הגלוי למשתמש חושףTimeline.Window
– נראה כמו פריט אחד. אם בוצע שינוי כדי להפעיל פריטים מרובים שלא אמורים להיראות אחת, עדיף להשתמש ב-methods של פלייליסט, כמו יש גםPlayer.addMediaItem
.SilenceMediaSource
: יצירת שקט למשך זמן מוגדר שנמצא שימושי למילוי פערים.AdsMediaSource
: הרחבת מקור מדיה באמצעות הוספת מודעות בצד הלקוח יכולות. פרטים נוספים זמינים במדריך להוספת מודעות.ServerSideAdInsertionMediaSource
: הרחבת מקור מדיה באמצעות מודעה בצד השרת יכולות של הוספה. פרטים נוספים זמינים במדריך להוספת מודעות.