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

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

ตั้งค่าพื้นผิว

Player มีจุดแรกเข้า 4 จุดเพื่อเชื่อมต่อเอาต์พุตวิดีโอกับSurface

นอกจากนี้ คุณยังล้างข้อมูลได้หลายวิธี ดังนี้

เลือกประเภทพื้นผิวสำหรับ PlayerView

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

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

หากเป็นการดูวิดีโอปกติ ให้ใช้ 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 Composable 2 รายการที่สอดคล้องกับ คือ AndroidExternalSurface และ AndroidEmbeddedExternalSurface จาก androidx.compose.foundation อย่างไรก็ตาม คลาสพร็อกซีเหล่านี้มี API surface ที่จำกัดการเข้าถึงมุมมองพื้นฐาน Player จำเป็นต้องมียอดดูเหล่านั้นเพื่อจัดการวงจรทั้งหมดของแพลตฟอร์ม (การสร้างและการอัปเดตขนาด)

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

  • androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEW
  • androidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW

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