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 về đồ hoạ này.
Thiết lập nền tảng
Có 4 điểm cắm để Player kết nối đầu ra video với một số Surface:
void setVideoSurface(@Nullable Surface surface)void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void setVideoSurfaceView(@Nullable SurfaceView surfaceView)void setVideoTextureView(@Nullable TextureView textureView)
Ngoài ra, có nhiều cách để xoá dữ liệu này:
void clearVideoSurface()void clearVideoSurface(@Nullable Surface surface)void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder)void clearVideoSurfaceView(@Nullable SurfaceView surfaceView)void clearVideoTextureView(@Nullable TextureView textureView)
Chọn một loại bề mặt cho PlayerView
Thuộc tính surface_type của PlayerView cho phép bạn đặt loại nền tảng 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 toàn cảnhvideo_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 chế độ phát âm thanh và nên được dùng để tránh phải tạo một thành phần vì việc này có thể tốn nhiều tài nguyên.
Nếu chế độ xem dành cho hoạt động phát video thông thường, thì bạn nên 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 tối đa của màn hình trên các thiết bị Android TV có khả năng nâng cấp lớp giao diện người dùng.
Do đó, bạn nên ưu tiên 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à trường hợp cần có ảnh động mượt mà hoặc thao tác cuộn bề mặt video trước Android 7.0 (API cấp 24), như mô tả trong các lưu ý sau. Trong trường hợp này, bạn nên chỉ sử dụng TextureView khi SDK_INT nhỏ hơn 24 (Android 7.0) và SurfaceView trong trường hợp khác.
Chọn một loại thành phần hiển thị trong Compose
Trong Compose, giải pháp tương tác sử dụng thành phần kết hợp AndroidView để bao bọc SurfaceView và TextureView. Hai thành phần kết hợp tương ứng với thành phần đó là AndroidExternalSurface và AndroidEmbeddedExternalSurface trong androidx.compose.foundation. Tuy nhiên, các lớp proxy này cung cấp một giao diện API giới hạn quyền truy cập vào các khung hiển thị cơ bản. Player cần những khung hiển thị đó để xử lý toàn bộ vòng đời của nền tảng (tạo và cập nhật kích thước).
Trong mô-đun media3-ui-compose, bạn có thể tìm thấy các thành phần kết hợp ContentFrame và PlayerSurface liên kết Player với Surface theo cách nhận biết vòng đời. Trong trường hợp này, các loại bề mặt là:
androidx.media3.ui.compose.SURFACE_TYPE_SURFACE_VIEWandroidx.media3.ui.compose.SURFACE_TYPE_TEXTURE_VIEW
Không có loại none, vì loại này sẽ tương ứng với việc không đưa thành phần kết hợp vào cây giao diện người dùng Compose.