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