הדרגתית

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

פורמט מאגר נתמך תגובות
MP4 כן
M4A כן
FMP4 כן
WebM כן
Matroska כן
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 מספק כמה דרכים להתאים את חוויית ההפעלה לצרכים של האפליקציה. דוגמאות אפשר לראות בדף ההתאמה האישית.