הדרגתית

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

פורמט הקונטיינר נתמך תגובות
MP4 כן
M4A כן
FMP4 כן
WebM כן
מטרוסקה כן
MP3 כן חלק מהשידורים זמינים רק באמצעות דילוג על קצב העברת נתונים קבוע**
Ogg כן קבצים שמכילים Vorbis,‏ Opus ו-FLAC
WAV כן
MPEG-TS כן
MPEG-PS כן
‎.FLV כן לא ניתן לדלג קדימה או אחורה*
ADTS‏ (AAC) כן אפשר לדלג רק באמצעות דילוג קבוע בקצב נתונים**
FLAC כן באמצעות ספריית FLAC או כלי חילוץ FLAC בספריית ExoPlayer***
AMR כן אפשר לדלג רק באמצעות דילוג קבוע בקצב נתונים**

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

** לכלי החילוץ האלה יש דגלי FLAG_ENABLE_CONSTANT_BITRATE_SEEKING בשביל הפעלת דילוג משוער באמצעות הנחה של קצב העברת נתונים קבוע. הפונקציונליות הזו לא מופעלת כברירת מחדל. הדרך הפשוטה ביותר להפעיל את האפשרות הזו לכל כלי החילוץ שתומכים באפשרות הזו. DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, כפי שמתואר כאן.

*** כלי החילוץ של ספריית FLAC מפיק אודיו גולמי, ואפשר לטפל בו. לפי המסגרת בכל רמות ה-API. מחלץ ה-FLAC של ספריית ExoPlayer מפיק מסגרות אודיו של FLAC, ולכן הוא מסתמך על פענוח FLAC (לדוגמה, פענוח MediaCodec שמטפל ב-FLAC (נדרש החל מרמת API 27), או ספריית FFmpeg עם FLAC מופעל). ה-DefaultExtractorsFactory משתמש במחולל התוספים אם האפליקציה נוצרה באמצעות ספריית FLAC. אחרת, המערכת משתמשת במחולל של ספריית ExoPlayer.

שימוש ב-MediaItem

כדי להפעיל שידור פרוגרסיבי, יוצרים MediaItem עם ה-URI של המדיה ומעבירים אותו לנגן.

Kotlin

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri))
// Prepare the player.
player.prepare()

Java

// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri));
// Prepare the player.
player.prepare();

שימוש ב-ProgressiveMediaSource

לאפשרויות נוספות של התאמה אישית, אפשר ליצור ProgressiveMediaSource להעביר אותו ישירות לנגן במקום MediaItem.

Kotlin

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
ProgressiveMediaSource.Factory(dataSourceFactory)
    .createMediaSource(MediaItem.fromUri(progressiveUri))
// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media source to be played.
player.setMediaSource(mediaSource)
// Prepare the player.
player.prepare()

Java

// Create a data source factory.
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a progressive media source pointing to a stream uri.
MediaSource mediaSource =
    new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(progressiveUri));
// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media source to be played.
player.setMediaSource(mediaSource);
// Prepare the player.
player.prepare();

התאמה אישית של ההפעלה

ב-ExoPlayer יש כמה דרכים להתאים אישית את חוויית ההפעלה לצרכים של האפליקציה. דוגמאות מופיעות בדף ההתאמה האישית.