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

หน้านี้อธิบายเกี่ยวกับประเภทของ Surface ต่างๆ ที่ใช้สำหรับการเล่นวิดีโอด้วย 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

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

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

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