ไลบรารี Jetpack Media3 มี CompositionPlayer API ซึ่งเป็นการติดตั้งใช้งาน Player ที่มีประสิทธิภาพสำหรับการดูตัวอย่างการแก้ไขวิดีโอแบบเรียลไทม์
CompositionPlayer จะช่วยให้คุณแสดงตัวอย่างเอาต์พุตได้อย่างถูกต้อง หากแอปของคุณอนุญาตให้ผู้ใช้แก้ไขวิดีโอ เช่น การใช้เอฟเฟกต์ การตัดแต่ง หรือการรวมชิ้นงานสื่ออินพุตหลายรายการ ฟีเจอร์นี้มีประโยชน์ในกรณีที่คุณไม่จำเป็นต้องบันทึกการแก้ไขที่ใช้ หรือเพื่อตรวจสอบว่าการแก้ไขได้รับการกำหนดค่าตามที่ต้องการก่อนที่จะคอมมิตลงในวิดีโอสุดท้ายเพื่อส่งออก
CompositionPlayer คืออะไร
CompositionPlayer เป็นการติดตั้งใช้งานอินเทอร์เฟซ
Player แบบพิเศษ ซึ่งออกแบบมาเพื่อเล่นออบเจ็กต์ Composition โดยเฉพาะ
Composition จะกำหนดวิธีจัดเรียงชิ้นงานสื่ออินพุต เช่น คลิปวิดีโอและแทร็กเสียง รวมถึงเอฟเฟกต์เสียงและวิดีโอที่ควรนำไปใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับ
Composition API ได้ที่กำหนด Composition ของชิ้นงานสื่อ
วัตถุประสงค์หลักของ CompositionPlayer คือการแสดงผล Composition,
นี้แบบเรียลไทม์พร้อมการแก้ไขทั้งหมดที่ระบุไว้ ซึ่งช่วยให้ผู้ใช้เห็นลักษณะการแก้ไขได้อย่างชัดเจน
ก่อนที่จะคอมมิตลงในกระบวนการส่งออกที่อาจใช้เวลานานและใช้
ทรัพยากรมาก จากนั้นคุณสามารถใช้ออบเจ็กต์ Composition เดียวกันกับ
อินสแตนซ์ Transformer เพื่อส่งออกได้ ซึ่งดูข้อมูลเพิ่มเติมได้
ที่ การส่งออก Composition
CompositionPlayer กับ ExoPlayer
แม้ว่าทั้ง CompositionPlayer และ ExoPlayer จะเป็นการติดตั้งใช้งาน Player
ภายใน Media3 แต่ก็ได้รับการปรับให้เหมาะกับกรณีการใช้งานที่แตกต่างกัน
ฟีเจอร์ |
CompositionPlayer |
ExoPlayer |
สื่ออินพุต |
ใช้ออบเจ็กต์ Composition รายการเดียว ซึ่งประกอบด้วยอินสแตนซ์ EditedMediaItem หลายรายการพร้อมเอฟเฟกต์ต่อรายการ |
ใช้ MediaItem รายการเดียวหรือ เพลย์ลิสต์ ของอินสแตนซ์ MediaItem |
ไทม์ไลน์ |
ไทม์ไลน์และระยะเวลาจะอิงตาม Composition ทั้งหมด |
ไทม์ไลน์และระยะเวลาจะสอดคล้องกับ MediaItem ที่เล่นอยู่ |
เอฟเฟกต์ |
เอฟเฟกต์จะกำหนดไว้ภายใน Composition และสามารถนำไปใช้กับ EditedMediaItem รายการเดียวหรือ Composition ทั้งหมดก็ได้ |
เอฟเฟกต์จะตั้งค่าในอินสแตนซ์ ExoPlayer เองด้วย setVideoEffects() และระบบจะใช้เอฟเฟกต์แต่ละรายการกับแต่ละรายการในเพลย์ลิสต์แยกกัน |
โดยสรุป CompositionPlayer จะมีประโยชน์มากที่สุดเมื่อคุณต้องการแสดงผล
ที่ซับซ้อน Composition ของสื่อและเอฟเฟกต์ ซึ่งโดยปกติจะอยู่ในบริบทการแก้ไข ใช้ ExoPlayer สำหรับการเล่นเนื้อหาเสียงหรือวิดีโอแบบทั่วไป หรือเพื่อดูตัวอย่างการแก้ไขชิ้นงานเดียวด้วย setVideoEffects()
CompositionPlayer สำหรับการดูตัวอย่าง
การผสานรวม CompositionPlayer เข้ากับแอปของคุณมีขั้นตอนสำคัญ 2-3 ขั้นตอน ขั้นแรก
ใช้รูปแบบ Builder เพื่อสร้างอินสแตนซ์ CompositionPlayer จากนั้นตั้งค่า
Composition ที่จะเล่น:
val compositionPlayer = CompositionPlayer.Builder(context).build() compositionPlayer.setComposition(composition) compositionPlayer.prepare() compositionPlayer.play()
ดูคำแนะนำเกี่ยวกับวิธีสร้าง Composition ได้ในส่วน
สร้าง Composition
โปรดทราบว่าเนื่องจาก CompositionPlayer ติดตั้งใช้งานอินเทอร์เฟซ Player คุณจึงสามารถ
จากนั้น ตั้งค่าเอาต์พุตเป้าหมาย และ ควบคุมเพลเยอร์ ผ่านเมธอด Player มาตรฐานได้
การจัดการข้อผิดพลาด
แนบอินสแตนซ์ Player.Listener กับ CompositionPlayer เพื่อตอบสนอง
ต่อเหตุการณ์และการเล่นข้อผิดพลาด การเรียกกลับ onPlayerError() จะแสดงปัญหาที่มาจากคอมโพเนนต์เฉพาะการแก้ไข เช่น
Composition หรือ VideoGraph.Factory ด้วย ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับเหตุการณ์เพลเยอร์
สิ่งสำคัญที่ควรพิจารณา
ฟีเจอร์และข้อจำกัดบางอย่างที่ควรทราบเมื่อใช้ CompositionPlayer มีดังนี้
- แม้ว่า
CompositionPlayerจะอิงตามอินเทอร์เฟซPlayerแต่ลักษณะการทำงานบางอย่างจะแตกต่างจากExoPlayerเนื่องจากขึ้นอยู่กับCompositionในการเล่น ตัวอย่างเช่นCompositionPlayerรองรับเฉพาะการตั้งค่าโหมดเล่นซ้ำ เป็นREPEAT_MODE_OFFหรือREPEAT_MODE_ALL - โดยค่าเริ่มต้น
CompositionPlayerจะใช้SingleInputVideoGraph.Factoryแต่หาก Composition ใช้ลำดับมากกว่า 1 รายการที่มีชิ้นงานรูปภาพหรือวิดีโอ คุณควรใช้setVideoGraphFactory()เมื่อสร้างอินสแตนซ์CompositionPlayerเพื่อใช้MultipleInputVideoGraph.FactoryแทนSingleInputVideoGraph.Factoryก็เพียงพอแล้วหากมีเพียงลำดับเดียวที่มีชิ้นงานรูปภาพหรือวิดีโอ และลำดับอื่นๆ เป็นเสียงเท่านั้น - ชิ้นงานสื่อทั้งหมดใน Composition ควรมีการตั้งค่าระยะเวลาอย่างชัดเจน,
ไม่ว่าจะใช้
MediaItem.Builder.setImageDurationMs()สำหรับรูปภาพ หรือใช้EditedMediaItem.Builder.setDurationUs()สำหรับเสียงหรือวิดีโอ
ระบบรองรับกรณีการใช้งานต่อไปนี้
- การดูตัวอย่างชิ้นงานเดียว
- การดูตัวอย่างลำดับเดียว (นั่นคือ ชิ้นงานสื่อตามลำดับ)
- การดูตัวอย่างลำดับวิดีโอเดียว + ลำดับเสียงเดียว (เช่น เสียงพื้นหลัง)
กรณีการใช้งานต่อไปนี้อยู่ระหว่างการพัฒนา
- การดูตัวอย่างชิ้นงานหลายรายการ รวมถึงเลย์เอาต์ เช่น ภาพซ้อนภาพ ข้างๆ และกริด ซึ่งเกี่ยวข้องกับลำดับวิดีโอหลายรายการ
- การปรับแต่งไปป์ไลน์การแก้ไขด้วยเอนจินกราฟิกอื่น
คำขอฟีเจอร์
หากมีคำขอฟีเจอร์หรือความคิดเห็นสำหรับ CompositionPlayer โปรดรายงาน
ปัญหาในที่เก็บ Media3 GitHub