หน้านี้อธิบายเกี่ยวกับแพลตฟอร์มประเภทต่างๆ ที่ใช้สำหรับการเล่นวิดีโอด้วย Media3 และวิธีเลือกประเภทที่เหมาะสมกับกรณีการใช้งานของคุณ หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับออบเจ็กต์ Surface ใน Android โปรดอ่านเอกสารประกอบด้านกราฟิกนี้
ตั้งค่าพื้นผิว
Player มีจุดแรกเข้า 4 จุดเพื่อเชื่อมต่อเอาต์พุตวิดีโอกับSurface
void setVideoSurface(@Nullable Surface surface)void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void setVideoSurfaceView(@Nullable SurfaceView surfaceView)void setVideoTextureView(@Nullable TextureView textureView)
นอกจากนี้ คุณยังล้างข้อมูลได้หลายวิธี ดังนี้
void clearVideoSurface()void clearVideoSurface(@Nullable Surface surface)void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void clearVideoSurfaceView(@Nullable SurfaceView surfaceView)void clearVideoTextureView(@Nullable TextureView textureView)
เลือกประเภทพื้นผิวสำหรับ 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_VIEWandroidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
ไม่มีประเภท none เนื่องจากประเภทดังกล่าวจะสอดคล้องกับการไม่รวม Composable ไว้ในแผนผัง UI ของ Compose