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

สําหรับ Use Case ง่ายๆ การเริ่มต้นใช้งาน ExoPlayer ประกอบด้วยการใช้ขั้นตอนต่อไปนี้

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

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

เพิ่ม ExoPlayer เป็นทรัพยากร Dependency

เพิ่มโมดูล ExoPlayer

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

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

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 Media

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

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

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

เปิดใช้ multidex

หาก Gradle minSdkVersion เป็น 20 หรือต่ำกว่า คุณควรเปิดใช้ MultiDex เพื่อป้องกันข้อผิดพลาดในการบิลด์

สร้างโปรแกรมเล่น

คุณสามารถสร้างอินสแตนซ์ 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 ไว้ใน layout.xml ของแอปพลิเคชันได้ ตัวอย่างเช่น หากต้องการเชื่อมโยงโปรแกรมเล่นกับมุมมอง ให้ทำดังนี้

Kotlin

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

Java

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

นอกจากนี้ คุณยังใช้ PlayerControlView เป็นคอมโพเนนต์แบบสแตนด์อโลนได้อีกด้วย ซึ่งมีประโยชน์สำหรับกรณีการใช้งานที่มีเฉพาะเสียง

คุณใช้คอมโพเนนต์ UI ที่คอมไพล์ไว้ล่วงหน้าของ ExoPlayer หรือไม่ก็ได้ สําหรับแอปวิดีโอที่ใช้ UI ของตนเอง คุณสามารถตั้งค่า SurfaceView, TextureView, SurfaceHolder หรือ Surface เป้าหมายได้โดยใช้เมธอด setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder และ setVideoSurface ของ ExoPlayer ตามลําดับ คุณสามารถใช้เมธอด 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