ประเภทพื้นผิว

หน้านี้อธิบายแพลตฟอร์มประเภทต่างๆ ที่สามารถใช้เล่นวิดีโอด้วย Media3 และวิธีเลือกแพลตฟอร์มที่เหมาะสมกับกรณีการใช้งานของคุณ หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับออบเจ็กต์ Surface ใน Android โปรดอ่านเอกสารประกอบเกี่ยวกับกราฟิกนี้

เลือกประเภทแพลตฟอร์มสําหรับ PlayerView

แอตทริบิวต์ surface_type ของ PlayerView ช่วยให้คุณกำหนดประเภทแพลตฟอร์มที่ใช้เล่นวิดีโอได้ ค่าที่ใช้ได้มีดังนี้

  • surface_view (SurfaceView)
  • texture_view (TextureView)
  • spherical_gl_surface_view (SphericalGLSurfaceView) - สำหรับการเล่นวิดีโอแบบทรงกลม
  • video_decoder_gl_surface_view (VideoDecoderGLSurfaceView) - การแสดงผลวิดีโอโดยใช้โปรแกรมแสดงผลส่วนขยาย
  • none - ซึ่งใช้สำหรับการเล่นเสียงเท่านั้นและควรใช้เพื่อหลีกเลี่ยงการสร้างแพลตฟอร์ม เนื่องจากการสร้างแพลตฟอร์มอาจทำให้สิ้นเปลือง

หากมุมมองมีไว้สำหรับการเล่นวิดีโอปกติ คุณควรใช้ surface_view หรือ texture_view SurfaceView มีข้อดีหลายประการเหนือกว่า TextureView สำหรับการเล่นวิดีโอ

  • ลดการใช้พลังงานในอุปกรณ์ต่างๆ ลงอย่างมาก
  • กำหนดเวลาเฟรมได้แม่นยำยิ่งขึ้น ทำให้วิดีโอเล่นได้อย่างราบรื่นมากขึ้น
  • รองรับเอาต์พุตวิดีโอ HDR คุณภาพสูงขึ้นในอุปกรณ์ที่พร้อมใช้งาน
  • รองรับเอาต์พุตที่ปลอดภัยเมื่อเล่นเนื้อหาที่ได้รับการคุ้มครอง DRM
  • ความสามารถในการแสดงผลเนื้อหาวิดีโอที่ความละเอียดเต็มรูปแบบของจอแสดงผลในอุปกรณ์ Android TV ที่ปรับขนาดเลเยอร์ UI

ดังนั้น คุณควรเลือกใช้ SurfaceView แทน TextureView หากเป็นไปได้ คุณควรใช้ TextureView เฉพาะในกรณีที่ SurfaceView ไม่ตรงกับความต้องการของคุณ ตัวอย่างหนึ่งคือกรณีที่ต้องใช้ภาพเคลื่อนไหวหรือการเลื่อนที่ราบรื่นของแพลตฟอร์มวิดีโอก่อน Android 7.0 (API ระดับ 24) ตามที่อธิบายไว้ในหมายเหตุต่อไปนี้ ในกรณีนี้ เราขอแนะนำให้ใช้ TextureView เฉพาะในกรณีที่ SDK_INT น้อยกว่า 24 (Android 7.0) และ SurfaceView ในกรณีอื่นๆ

เลือกประเภทพื้นผิวใน "เขียน"

ใน Compose โซลูชันการทำงานร่วมกันจะใช้ AndroidView Composable เพื่อรวมSurfaceView และ TextureView Composable 2 รายการที่ตรงกันคือ AndroidExternalSurface และ AndroidEmbeddedExternalSurface

โมดูล ui-compose ของ Media3 มี Composable PlayerSurface ที่ลิงก์ Player กับ Surface ในลักษณะที่คำนึงถึงวงจร ประเภทพื้นผิวในกรณีนี้มีดังนี้

ไม่มีประเภท none เนื่องจากจะสอดคล้องกับการไม่รวม PlayerSurface ในต้นไม้ UI ของคอมโพสิท