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