Trang này mô tả các loại nền tảng có thể dùng để phát video bằng Media3 và cách chọn loại nền tảng phù hợp với trường hợp sử dụng của bạn. Để tìm hiểu thêm về các đối tượng Surface trong Android, hãy đọc tài liệu đồ hoạ này.
Chọn loại nền tảng cho PlayerView
Thuộc tính surface_type
của PlayerView
cho phép bạn đặt loại bề mặt dùng để phát video. Các giá trị được phép là:
surface_view
(SurfaceView
)texture_view
(TextureView
)spherical_gl_surface_view
(SphericalGLSurfaceView
) – để phát video hình cầuvideo_decoder_gl_surface_view
(VideoDecoderGLSurfaceView
) – kết xuất video bằng trình kết xuất tiện íchnone
– chỉ dành cho việc phát âm thanh và nên được dùng để tránh phải tạo một nền tảng vì việc này có thể tốn kém.
Nếu thành phần hiển thị dùng để phát video thông thường, thì bạn nên sử dụng surface_view
hoặc texture_view
. SurfaceView
có một số lợi ích so với
TextureView
khi phát video:
- Giảm đáng kể mức tiêu thụ năng lượng trên nhiều thiết bị.
- Thời gian khung hình chính xác hơn, giúp phát video mượt mà hơn.
- Hỗ trợ đầu ra video HDR chất lượng cao hơn trên các thiết bị có hỗ trợ.
- Hỗ trợ đầu ra bảo mật khi phát nội dung được bảo vệ bằng DRM.
- Khả năng kết xuất nội dung video ở độ phân giải đầy đủ của màn hình trên các thiết bị Android TV giúp nâng cấp lớp giao diện người dùng.
Do đó, bạn nên ưu tiên sử dụng SurfaceView
thay vì TextureView
nếu có thể.
Bạn chỉ nên sử dụng TextureView
nếu SurfaceView
không đáp ứng được nhu cầu của bạn. Một ví dụ là khi cần ảnh động mượt mà hoặc cuộn bề mặt video trước Android 7.0 (API cấp 24), như mô tả trong các ghi chú sau. Trong trường hợp này, bạn chỉ nên sử dụng TextureView
khi SDK_INT
nhỏ hơn 24 (Android 7.0) và SurfaceView
nếu không.
Chọn một loại nền tảng trong Compose
Trong Compose, giải pháp tương tác sử dụng Thành phần kết hợp AndroidView
để gói SurfaceView
và TextureView
. Hai thành phần kết hợp tương ứng với đó là AndroidExternalSurface
và AndroidEmbeddedExternalSurface
.
Mô-đun ui-compose
Media3 cung cấp một Thành phần kết hợp PlayerSurface
liên kết Player
với Surface
theo cách nhận biết được vòng đời. Các loại bề mặt trong trường hợp này là:
SURFACE_TYPE_SURFACE_VIEW
(thực tế làAndroidExternalSurface
)SURFACE_TYPE_TEXTURE_VIEW
(AndroidEmbeddedExternalSurface
hiệu quả)
Không có loại none
, vì điều đó tương ứng với việc không đưa PlayerSurface
vào cây giao diện người dùng Compose.