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