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