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

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

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

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

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

เพิ่มโมดูล ExoPlayer

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

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

Kotlin

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

ดึงดูด

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

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

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

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

เปิดการรองรับ 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

แนบเพลเยอร์กับมุมมอง

ไลบรารี media3-ui มีคอมโพเนนต์ 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 ที่สร้างไว้ล่วงหน้าของ Media3 หรือไม่ก็ได้ สำหรับแอปวิดีโอที่ใช้ UI ของตนเอง คุณสามารถตั้งค่าเป้าหมาย SurfaceView, TextureView, SurfaceHolder หรือ Surface ได้โดยใช้เมธอด setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder และ setVideoSurface ของ Player ตามลำดับ คุณสามารถใช้ Callback Listener.onCues เพื่อรับคำบรรยายแทนเสียงที่ควรแสดงผลระหว่างการเล่น และใช้ setImageOutput เพื่อรับรูปภาพที่ถอดรหัสแล้ว

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

android:keepScreenOn="true"

หากแอปใช้ Jetpack Compose สำหรับ UI คุณสามารถใช้ Player Composable จากไลบรารี media3-ui-compose-material3 ได้ Player จะแสดงวิดีโอและมีค่าที่ป้อนข้อมูลล่วงหน้าสำหรับช่องตัวควบคุมการเล่น หากต้องการแนบออบเจ็กต์ androidx.media3.common.Player กับ Composable androidx.media3.ui.compose.material3.Player ให้ส่งเป็นอาร์กิวเมนต์ ดังนี้

// Bind the player to the composable.
Player(player = player)

อ่านเพิ่มเติมเกี่ยวกับการใช้คอมโพเนนต์ 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