ดูตัวอย่างการแก้ไขด้วย CompositionPlayer

ไลบรารี 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