הדרגתית

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

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

כדי להפעיל שידור Progressive, צריך ליצור 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 מספק דרכים רבות להתאמה אישית של חוויית ההפעלה לצרכים של האפליקציה. אפשר לראות דוגמאות בדף ההתאמה האישית.