การเริ่มต้นใช้งาน

สำหรับกรณีการใช้งานที่เรียบง่าย การเริ่มต้นใช้งาน ExoPlayer ประกอบด้วยการใช้ ขั้นตอนต่อไปนี้

  1. เพิ่ม ExoPlayer เป็นทรัพยากร Dependency ในโปรเจ็กต์
  2. สร้างอินสแตนซ์ ExoPlayer
  3. แนบเพลเยอร์กับ View (สำหรับเอาต์พุตวิดีโอและอินพุตของผู้ใช้)
  4. เตรียมเครื่องเล่นด้วย MediaItem เพื่อเล่น
  5. ปล่อยเพลเยอร์เมื่อเสร็จแล้ว

โดยจะอธิบายขั้นตอนเหล่านี้อย่างละเอียดที่ด้านล่าง ดูตัวอย่างทั้งหมดได้ใน PlayerActivity ในแอปเดโมหลัก

เพิ่ม ExoPlayer เป็นการขึ้นต่อกัน

เพิ่มโมดูล ExoPlayer

วิธีที่ง่ายที่สุดในการเริ่มต้นใช้งาน AndroidX Media3 คือการเพิ่มการอ้างอิง Gradle ในไลบรารีที่คุณต้องการในbuild.gradle ไฟล์ของโมดูลแอป

เช่น หากต้องการใช้ ExoPlayer ที่รองรับการเล่น DASH และคอมโพเนนต์ UI คุณสามารถเพิ่มการอ้างอิงในโมดูลได้ดังนี้

Kotlin

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

Groovy

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

โดย 1.7.1 คือเวอร์ชันที่คุณต้องการ (คุณดูเวอร์ชันล่าสุดได้โดย อ่านบันทึกประจำรุ่น) โมดูลทั้งหมดต้องเป็นเวอร์ชันเดียวกัน

AndroidX Media3 มีโมดูลไลบรารีที่ขึ้นอยู่กับ ไลบรารีภายนอกเพื่อมอบฟังก์ชันเพิ่มเติม บางรายการพร้อมใช้งานจากที่เก็บ Maven แต่บางรายการต้องสร้างด้วยตนเอง เรียกดูไดเรกทอรีไลบรารีและดูรายละเอียดใน README ของแต่ละรายการ

ดูข้อมูลเพิ่มเติมเกี่ยวกับโมดูลไลบรารีที่มีให้ได้ที่ หน้า AndroidX Media ของ Google Maven

เปิดการรองรับ Java 8

หากยังไม่ได้เปิดใช้ คุณต้องเปิดใช้การรองรับ Java 8 อย่างน้อยในไฟล์ build.gradle ทั้งหมดที่ขึ้นอยู่กับ ExoPlayer โดยเพิ่มข้อมูลต่อไปนี้ลงในส่วน android

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

สร้างเพลเยอร์

คุณสร้างอินสแตนซ์ ExoPlayer ได้โดยใช้ ExoPlayer.Builder ซึ่งมีตัวเลือกการปรับแต่งมากมาย โค้ดต่อไปนี้เป็นตัวอย่างที่ง่ายที่สุดของ การสร้างอินสแตนซ์

Kotlin

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

Java

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

หมายเหตุเกี่ยวกับการสนทนาแบบเธรด

ต้องเข้าถึงอินสแตนซ์ ExoPlayer จากเธรดแอปพลิเคชันเดียว ในกรณีส่วนใหญ่ เทรดนี้ควรเป็นเทรดหลักของแอปพลิเคชัน การใช้เทรดหลักของแอปพลิเคชันเป็นข้อกำหนดเมื่อใช้คอมโพเนนต์ UI ของ ExoPlayer หรือส่วนขยาย IMA

คุณระบุเธรดที่ต้องเข้าถึงอินสแตนซ์ ExoPlayer ได้อย่างชัดเจน โดยส่ง Looper เมื่อสร้างเพลเยอร์ หากไม่ได้ระบุ Looper ระบบจะใช้ Looper ของเธรดที่สร้างเพลเยอร์ หรือหากเธรดนั้นไม่มี Looper ระบบจะใช้ Looper ของเธรดหลักของแอปพลิเคชัน ในทุกกรณี คุณสามารถค้นหา Looper ของเธรดที่ต้องเข้าถึงเพลเยอร์ได้โดยใช้ Player.getApplicationLooper

ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลการทำงานแบบหลายเธรดของ ExoPlayer ได้ที่ส่วน "โมเดลการทำงานแบบหลายเธรด" ของ ExoPlayer Javadoc

แนบเพลเยอร์กับวิว

ไลบรารี ExoPlayer มีคอมโพเนนต์ UI ที่สร้างไว้ล่วงหน้ามากมายสำหรับการเล่นสื่อ ซึ่งรวมถึง 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);

การใช้คอมโพเนนต์ UI ที่สร้างไว้ล่วงหน้าของ ExoPlayer เป็นแบบไม่บังคับ สำหรับแอปวิดีโอที่ ใช้ UI ของตัวเอง คุณสามารถตั้งค่า SurfaceView, TextureView, SurfaceHolder หรือ Surface เป้าหมายได้โดยใช้วิธีการ setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder และ setVideoSurface ของ ExoPlayer ตามลำดับ Listener.onCues สามารถใช้การเรียกกลับเพื่อรับคำบรรยายแทนเสียง ที่ควรแสดงในระหว่างการเล่น และ setImageOutput สามารถใช้เพื่อ รับรูปภาพที่ถอดรหัสแล้ว

หากต้องการให้ผู้ใช้ได้รับประสบการณ์ที่สะดวกสบายยิ่งขึ้น ให้พิจารณาเพิ่มแอตทริบิวต์ keepScreenOn หรือตั้งค่าการล็อกการปลุกใน ExoPlayer คุณสามารถตรวจสอบการดำเนินการอื่นๆ ที่ทำให้อุปกรณ์ตื่นอยู่ได้ในหน้างานในเบื้องหลัง

android:keepScreenOn="true"

อ่านเพิ่มเติมเกี่ยวกับการใช้คอมโพเนนต์ UI ของ Media3 และการปรับแต่งคอมโพเนนต์เหล่านั้นในหน้า UI

ป้อนข้อมูลในเพลย์ลิสต์และเตรียมเครื่องเล่น

ใน 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