สำหรับ Use Case ง่ายๆ การเริ่มต้นใช้งาน ExoPlayer ประกอบด้วยการทำตามขั้นตอนต่อไปนี้
- เพิ่ม ExoPlayer เป็นทรัพยากร Dependency ในโปรเจ็กต์
- สร้างอินสแตนซ์
ExoPlayer - แนบเพลเยอร์กับมุมมอง (สำหรับเอาต์พุตวิดีโอและข้อมูลจากผู้ใช้)
- เตรียมเพลเยอร์ด้วย
MediaItemที่จะเล่น - ปล่อยเพลเยอร์เมื่อเสร็จแล้ว
ขั้นตอนเหล่านี้อธิบายไว้โดยละเอียดด้านล่าง ดูตัวอย่างที่สมบูรณ์ได้ที่
PlayerActivity ใน แอปเดโมหลัก
เพิ่ม ExoPlayer เป็นทรัพยากร Dependency
เพิ่มโมดูล ExoPlayer
วิธีที่ง่ายที่สุดในการเริ่มต้นใช้งาน AndroidX Media3 คือการเพิ่มทรัพยากร Dependency ของ Gradle ในไลบรารีที่คุณต้องการในไฟล์ build.gradle ของโมดูลแอป
ตัวอย่างเช่น หากต้องการใช้ ExoPlayer ที่รองรับการเล่น DASH และคอมโพเนนต์ UI คุณสามารถเพิ่มทรัพยากร Dependency ในโมดูลได้ดังนี้
Kotlin
implementation("androidx.media3:media3-exoplayer:1.11.0")
implementation("androidx.media3:media3-exoplayer-dash:1.11.0")
implementation("androidx.media3:media3-ui:1.11.0")
implementation("androidx.media3:media3-ui-compose-material3:1.11.0")
ดึงดูด
implementation "androidx.media3:media3-exoplayer:1.11.0"
implementation "androidx.media3:media3-exoplayer-dash:1.11.0"
implementation "androidx.media3:media3-ui:1.11.0"
implementation("androidx.media3:media3-ui-compose-material3:1.11.0")
โดย 1.11.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
แนบเพลเยอร์กับมุมมอง
ไลบรารี 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 ของเพลเยอร์
ตามลำดับ คุณสามารถใช้การเรียกกลับ Listener.onCues เพื่อรับคำบรรยายแทนเสียงที่จะแสดงระหว่างการเล่น และใช้ setImageOutput เพื่อรับรูปภาพที่ถอดรหัสแล้ว
พิจารณาเพิ่มแอตทริบิวต์ keepScreenOn เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่สะดวกสบายยิ่งขึ้น คุณสามารถดูการดำเนินการอื่นๆ ที่ทำให้เครื่องตื่นอยู่ได้ใน
หน้าการทำงานเบื้องหลัง
android:keepScreenOn="true"
หากแอปใช้ Jetpack Compose สำหรับ UI คุณสามารถใช้ Composable Player จากไลบรารี 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