איך מתחילים?

בתרחישים פשוטים, תחילת העבודה עם ExoPlayer כוללת הטמעה את השלבים הבאים:

  1. מוסיפים את ExoPlayer כתלות לפרויקט.
  2. יוצרים מכונה של ExoPlayer.
  3. מחברים את הנגן לתצוגה (לפלט וידאו ולקלט של משתמשים).
  4. אפשר להכין את השחקן עם MediaItem למשחק.
  5. שחרור הנגן בסיום.

השלבים האלה מתוארים בפירוט בהמשך. דוגמה מלאה זמינה במאמר בנושא PlayerActivity באפליקציית ההדגמה הראשית.

הוספת ExoPlayer כתלות

הוספת מודולים של ExoPlayer

הדרך הקלה ביותר להתחיל להשתמש ב-AndroidX Media3 היא להוסיף אפשרות תלויות בספריות שדרושות לך בקובץ build.gradle של האפליקציה של מודל טרנספורמר.

לדוגמה, כדי להסתמך על ExoPlayer עם תמיכה בהפעלה DASH ורכיבי ממשק משתמש אפשר להוסיף יחסי תלות במודולים, באופן הבא:

Kotlin

implementation("androidx.media3:media3-exoplayer:1.4.1")
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
implementation("androidx.media3:media3-ui:1.4.1")

Groovy

implementation "androidx.media3:media3-exoplayer:1.4.1"
implementation "androidx.media3:media3-exoplayer-dash:1.4.1"
implementation "androidx.media3:media3-ui:1.4.1"

כאשר 1.4.1 היא הגרסה המועדפת עליך (ניתן למצוא את הגרסה העדכנית ביותר לעיין בנתוני הגרסה). כל המודולים חייבים להיות באותה גרסה.

ב-AndroidX Media3 יש מודולים של ספריות שתלויים ב- ספריות חיצוניות כדי לספק פונקציונליות נוספת. חלק מהם יהיו זמינים ממאגר Maven, ואילו סוגים אחרים צריכים להיבנות באופן ידני. ניתן לעיין בספריית הספריות ולעיין בקובצי README ספציפיים לפרטים נוספים.

מידע נוסף על המודולים של הספרייה הזמינים זמין ב דף המדיה של Google Maven ל-AndroidX.

הפעלת התמיכה ב-Java 8

אם האפשרות לא מופעלת עדיין, עליך להפעיל תמיכה ב-Java 8 בכל הbuild.gradle קבצים שתלויים ב-ExoPlayer, על ידי הוספת הקוד הבא לקטע android:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

הפעלת Multidex

אם ערך Gradle minSdkVersion שלך הוא 20 ומטה, עליך להפעיל Multidex לפי הסדר כדי למנוע שגיאות build.

יצירת הנגן

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

Kotlin

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

הערה לגבי שרשור

צריך לגשת למכונות של ExoPlayer משרשור של אפליקציה אחת. עבור ברוב המקרים, זה צריך להיות ה-thread הראשי של האפליקציה. באמצעות כשמשתמשים ברכיבי ממשק המשתמש של ExoPlayer, ה-thread הראשי של האפליקציה נדרש. או בתוסף IMA.

ניתן לגשת באופן מפורש לשרשור שבו צריך לגשת למופע של ExoPlayer שצוינו על ידי העברת Looper במהלך יצירת הנגן. אם לא, Looper שצוין, אז ה-Looper בשרשור שבו נוצר הנגן נעשה בו שימוש, או אם השרשור לא מכיל Looper, ב-Looper נעשה שימוש ב-thread הראשי של האפליקציה. בכל המקרים, Looper של השרשור מ- שאליו צריך לגשת לנגן, אפשר לשלוח שאילתה באמצעות Player.getApplicationLooper.

למידע נוסף על מודל השרשורים של ExoPlayer אפשר לעיין ב 'מודל שרשורים' של ExoPlayer Javadoc.

צירוף הנגן לתצוגה

ספריית ExoPlayer מספקת מגוון רכיבים מוכנים מראש של ממשק המשתמש למדיה להפעלה. למשל PlayerView, שכולל PlayerControlView, SubtitleView ו-Surface שבהם הסרטון שעבר עיבוד. אפשר לכלול PlayerView בקובץ ה-XML של הפריסה של האפליקציה. לדוגמה, כדי לקשר את הנגן לתצוגה:

Kotlin

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

אפשר גם להשתמש ב-PlayerControlView כרכיב עצמאי, הוא שימושי בתרחישים לדוגמה של אודיו בלבד.

השימוש ברכיבי ממשק המשתמש המוכנים מראש של ExoPlayer הוא אופציונלי. באפליקציות וידאו שמטמיעים ממשק משתמש משלהם, היעד SurfaceView, TextureView, אפשר להגדיר את SurfaceHolder או את Surface באמצעות ExoPlayer setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder וגם setVideoSurface שיטות בהתאמה. ה-method addTextOutput של ExoPlayer יכולה כדי לקבל כיתובים שאמורים להיות מוצגים במהלך הפעלה.

אכלוס הפלייליסט והכנת הנגן

ב-ExoPlayer, כל קטע מדיה מיוצג על ידי MediaItem. כדי לשחק קטע מדיה, צריך ליצור MediaItem תואם, להוסיף אותו הנגן, מכינים את הנגן וקוראים לפונקציה play כדי להתחיל את ההפעלה:

Kotlin

// Build the media item.
val mediaItem = MediaItem.fromUri(videoUri)
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media item.
MediaItem mediaItem = MediaItem.fromUri(videoUri);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ExoPlayer תומך בפלייליסטים ישירות, כך שאפשר להכין את הנגן שכוללים פריטי מדיה רבים שיושמעו אחד אחרי השני:

Kotlin

// Build the media items.
val firstItem = MediaItem.fromUri(firstVideoUri)
val secondItem = MediaItem.fromUri(secondVideoUri)
// Add the media items to be played.
player.addMediaItem(firstItem)
player.addMediaItem(secondItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media items.
MediaItem firstItem = MediaItem.fromUri(firstVideoUri);
MediaItem secondItem = MediaItem.fromUri(secondVideoUri);
// Add the media items to be played.
player.addMediaItem(firstItem);
player.addMediaItem(secondItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ניתן לעדכן את הפלייליסט במהלך ההפעלה ללא צורך להכין את לנגן שוב. לקבלת מידע נוסף על אכלוס ושינוי של פלייליסט הדף 'פלייליסטים'. מידע נוסף על האפשרויות השונות שזמינות כאשר לבניית פריטי מדיה, כגון חיתוך וצירוף קובצי כתוביות, דף פריטי מדיה.

שליטה בנגן

לאחר שהנגן מוכן, אפשר לשלוט בהפעלה באמצעות שיטות קריאה בנגן. אלה כמה מהשיטות הנפוצות ביותר:

  • play ו-pause מתחילים ולהשהות את ההפעלה.
  • seekTo מאפשר דילוג בתוך המדיה.
  • בhasPrevious, בhasNext, בprevious ובnext אפשר לנווט דרך פלייליסט.
  • setRepeatMode קובע אם המדיה תופעל בלופ ובאיזה אופן.
  • מצב אקראי של פלייליסטים נקבע על ידי setShuffleModeEnabled.
  • setPlaybackParameters שינוי מהירות ההפעלה וגובה הצליל.

אם הנגן כפוף לPlayerView או ל-PlayerControlView, האינטראקציה של המשתמש עם הרכיבים האלה תגרום לשיטות המתאימות את הנגן שרוצים להפעיל.

שחרור הנגן

חשוב לשחרר את הנגן כשכבר אין בו צורך, כדי בחינם ליצור משאבים מוגבלים כמו מפענחי וידאו לשימוש של אפליקציות אחרות. הזה אפשר להתקשר אל ExoPlayer.release.