รูปแบบที่รองรับ

ดูข้อมูลเบื้องต้นเกี่ยวกับรูปแบบสื่อโดยทั่วไปได้ที่หน้า "รูปแบบที่รองรับใน ExoPlayer" ข้อจำกัดเดียวกันในการโหลด แยก และถอดรหัสสตรีมจะมีผลกับ Transformer ด้วย แม้ว่า Transformer จะไม่รองรับโมดูลตัวถอดรหัสซอฟต์แวร์ที่มาพร้อมกับ ExoPlayer

นอกจากนี้ Transformer ยังใช้ MediaCodec ในการเข้ารหัส ซึ่งจำกัดรูปแบบเอาต์พุตที่รองรับ ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อจำกัดในการเข้ารหัสได้ที่ตัวแปลงรหัสวิดีโอ MediaCodec

โดยค่าเริ่มต้น Transformer จะเอาต์พุตไฟล์ MP4 มาตรฐานโดยใช้ InAppMp4Muxer หากแอปของคุณต้องใช้ MP4 แบบแยกส่วน คุณ สามารถส่ง InAppFragmentedMp4Muxer.Factory เมื่อ เริ่มต้นอินสแตนซ์ Transformer นอกจากนี้ Media3 ยังรองรับรูปแบบอื่นๆ เช่น WebM, AAC, Ogg และ WAV โดยใช้ Muxer เฉพาะ เช่น WebmMuxer, AacMuxer, OggMuxer และ WavMuxer ซึ่งต้องห่อหุ้มไว้ใน Muxer.Factory ที่กำหนดเองเพื่อแทรก แต่รุ่นในอนาคตจะมี ข้อมูลการใช้งาน Factory ที่พร้อมใช้งานเพื่อลดความซับซ้อนของกระบวนการนี้

การรองรับรูปภาพ

Transformer ใช้ BitmapFactory เพื่อโหลดและถอดรหัสเนื้อหารูปภาพทั้งหมด ดังนั้น Transformer จึงรองรับรูปแบบทั้งหมดที่ BitmapFactory รองรับ ดูประเภทรูปภาพที่รองรับได้ที่ การรองรับรูปภาพ สำหรับรูปแบบหลายรูปภาพ (เช่น GIF) ระบบจะแสดงเฟรมรูปภาพเดียวจากคอนเทนเนอร์หากใช้ DefaultAssetLoaderFactory

รูปแบบพิเศษ

Transformer รองรับการจัดการอินพุตในรูปแบบสื่อใหม่ๆ ที่มีฟีเจอร์พิเศษเมื่อเทียบกับรูปแบบทั่วไป

การจัดการวิดีโอ HDR

อุปกรณ์จำนวนมากขึ้นเรื่อยๆ รองรับการบันทึกวิดีโอ HDR ซึ่งให้สีสันที่สดใสและแม่นยำยิ่งขึ้น รวมถึงช่วงความสว่างที่มากขึ้น

Transformer รองรับการตัดต่อวิดีโอ HDR จาก Android 13 (ระดับ API 33) ขึ้นไปในอุปกรณ์ที่รองรับการเข้ารหัสที่จำเป็น เมื่อตัดต่อวิดีโอ HDR เอฟเฟกต์วิดีโอ GL ต้องจัดการคอมโพเนนต์สีแบบจุดลอยตัว 16 บิตและพื้นที่สี BT.2020 HDR_MODE_KEEP_HDR เป็นโหมดเริ่มต้นเมื่อสร้าง Composition หากไม่รองรับการตัดต่อ HDR ระบบจะเปลี่ยนไปใช้ HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL

ระบบรองรับการแปลง HDR เป็น SDR หรือที่เรียกว่า การทำ Tone Mapping ตั้งแต่ Android 10 (ระดับ API 29) ขึ้นไปในอุปกรณ์ที่รองรับการถอดรหัสและ OpenGL ที่จำเป็น ซึ่งจะเป็นประโยชน์เมื่อแชร์สื่อ HDR ไปยังแอปหรือบริการอื่นๆ ที่ไม่รองรับการนำเข้าเนื้อหา HDR หากต้องการเปิดใช้การทำ Tone Mapping โดยใช้ OpenGL ให้เรียก setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) เมื่อสร้าง Composition ตั้งแต่ Android 12 (ระดับ API 31) ขึ้นไป MediaCodec ยังรองรับการทำ Tone Mapping ในอุปกรณ์บางรุ่น รวมถึงอุปกรณ์ทั้งหมดที่ใช้ Android 13 ขึ้นไปซึ่งบันทึกวิดีโอ HDR ได้ หากต้องการเปิดใช้การทำ Tone Mapping โดยใช้ MediaCodec ให้เรียก setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC)

การจัดการสื่อสโลว์โมชัน

วิดีโอสโลว์โมชันมีข้อมูลเมตาที่ระบุความเร็วในการเล่นแต่ละส่วนของสตรีม การทำให้แบน คือกระบวนการสร้างสตรีมวิดีโอใหม่โดยอิงตามวิดีโอสโลว์โมชัน แต่จะเร่งหรือลดความเร็วของส่วนต่างๆ ตามข้อมูลเมตา เพื่อให้เล่นได้อย่างถูกต้องแม้ในเพลเยอร์ที่ไม่ใช้ข้อมูลเมตาสโลว์โมชัน

หากต้องการทำให้สตรีมสโลว์โมชันแบน ให้ใช้เมธอด Builder setFlattenForSlowMotion ใน EditedMediaItem

Kotlin

val editedMediaItem =
  EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build()
val transformer = Transformer.Builder(context).addListener(transformerListener).build()
transformer.start(editedMediaItem, outputPath)

Java

EditedMediaItem editedMediaItem =
    new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build();
Transformer transformer =
    new Transformer.Builder(context).addListener(transformerListener).build();
transformer.start(editedMediaItem, outputPath);

ซึ่งจะช่วยให้คุณรองรับวิดีโอสโลว์โมชันได้โดยไม่ต้องกังวลเกี่ยวกับการจัดการรูปแบบพิเศษเหล่านี้ สิ่งที่คุณต้องทำคือจัดเก็บและเล่นวิดีโอเวอร์ชันที่ทำให้แบนแล้วแทนที่จะเป็นเวอร์ชันต้นฉบับ