หน้านี้อธิบายแพลตฟอร์มประเภทต่างๆ ที่สามารถใช้เล่นวิดีโอด้วย 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
ในลักษณะที่คำนึงถึงวงจร ประเภทพื้นผิวในกรณีนี้มีดังนี้
SURFACE_TYPE_SURFACE_VIEW
(มีประสิทธิภาพเท่ากับAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(มีประสิทธิภาพAndroidEmbeddedExternalSurface
)
ไม่มีประเภท none
เนื่องจากจะสอดคล้องกับการไม่รวม PlayerSurface
ในต้นไม้ UI ของคอมโพสิท