สําหรับ Use Case ง่ายๆ การเริ่มต้นใช้งาน ExoPlayer
ประกอบด้วยการดำเนินการตามขั้นตอนต่อไปนี้
- เพิ่ม ExoPlayer เป็น Dependency ให้กับโปรเจ็กต์
- สร้างอินสแตนซ์
ExoPlayer
- แนบเพลเยอร์กับมุมมอง (สำหรับเอาต์พุตวิดีโอและอินพุตของผู้ใช้)
- เตรียมผู้เล่นด้วย
MediaItem
เพื่อเล่น - ปล่อยผู้เล่นเมื่อเสร็จแล้ว
ขั้นตอนเหล่านี้จะอธิบายไว้อย่างละเอียดด้านล่าง ดูตัวอย่างที่สมบูรณ์ได้ในส่วน PlayerActivity
ของแอปสาธิตหลัก
เพิ่ม ExoPlayer เป็นทรัพยากร Dependency
เพิ่มโมดูล ExoPlayer
วิธีที่ง่ายที่สุดในการเริ่มต้นใช้งาน AndroidX Media3 คือการเพิ่มการพึ่งพา gradle ในไลบรารีที่คุณต้องการในไฟล์ build.gradle
ของโมดูลแอป
ตัวอย่างเช่น หากต้องการใช้ ExoPlayer ที่รองรับการเล่น DASH และคอมโพเนนต์ UI คุณก็เพิ่มการพึ่งพาในโมดูลได้ดังนี้
Kotlin
implementation("androidx.media3:media3-exoplayer:1.5.0") implementation("androidx.media3:media3-exoplayer-dash:1.5.0") implementation("androidx.media3:media3-ui:1.5.0")
Groovy
implementation "androidx.media3:media3-exoplayer:1.5.0" implementation "androidx.media3:media3-exoplayer-dash:1.5.0" implementation "androidx.media3:media3-ui:1.5.0"
โดยที่ 1.5.0 คือเวอร์ชันที่ต้องการ (ดูเวอร์ชันล่าสุดได้จากบันทึกประจำรุ่น) โมดูลทั้งหมดต้องเป็นเวอร์ชันเดียวกัน
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
แนบโปรแกรมเล่นกับมุมมอง
คลัง 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