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