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