הדרגתית

אפשר להפעיל ישירות ב-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. הפלט של הספרייה ExoPlayer FLAC extractor הוא פריימים של אודיו FLAC, ולכן היא מסתמכת על FLAC decoder (לדוגמה, MediaCodecdecoder שמטפל ב-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 מספק כמה דרכים להתאים את חוויית ההפעלה לצרכים של האפליקציה. דוגמאות אפשר למצוא בדף ההתאמה האישית.