Trình quản lý tải trước giúp bạn mang lại trải nghiệm tốt hơn cho người dùng bằng cách phân phát nội dung cho họ nhanh hơn, giảm thời gian chờ khi họ chuyển từ mục này sang mục khác. Bạn cũng có thể tuỳ chỉnh thời lượng và thứ hạng của việc tải trước cho mỗi mục.
Một tình huống phổ biến trên mạng xã hội là ứng dụng cho người dùng thấy một danh sách hoặc băng chuyền gồm các lựa chọn về nội dung nghe nhìn. Ví dụ: một ứng dụng có thể hiển thị một băng chuyền gồm các video ngắn. Khi một video kết thúc, ứng dụng sẽ chuyển sang video tiếp theo. Nếu không thích video đang xem, người dùng có thể vuốt sang video tiếp theo hoặc video trước đó.
Nếu bạn không tải trước nội dung video, người dùng có thể cảm thấy khó chịu. Người dùng xem xong một nội dung nghe nhìn và sau đó phải đợi nội dung nghe nhìn tiếp theo tải.
Mặt khác, nếu bạn tải trước nội dung quá thường xuyên, thì điều đó sẽ lãng phí điện năng và băng thông mạng khi tải nội dung mà người dùng có thể không bao giờ thực sự phát.
DefaultPreloadManager
giúp ứng dụng của bạn cân bằng những mối lo ngại này. Trình quản lý tải trước hoạt động với ứng dụng của bạn để quyết định mức độ quan trọng của từng mục nội dung nghe nhìn và tải trước số lượng thích hợp.
Phân công lao động
Nếu bạn sử dụng DefaultPreloadManager
, một số công việc sẽ do mã của bạn thực hiện và một số công việc khác do trình quản lý tải trước thực hiện.
Ứng dụng của bạn phải thực hiện những việc sau:
- Tạo các đối tượng
ExoPlayer
của ứng dụng bằng cách sử dụng cùng một đối tượngDefaultPreloadManager.Builder
mà bạn dùng để tạo trình quản lý tải trước. GọiDefaultPreloadManager.Builder.buildExoPlayer()
để tạoExoPlayer
. - Cho trình quản lý tải trước biết về từng mục nội dung nghe nhìn mà trình quản lý này sẽ theo dõi. Đây có thể không phải là toàn bộ nội dung trong băng chuyền; thay vào đó, bạn chỉ cần cho biết một vài mục đầu tiên sẽ được phát. Khi người dùng di chuyển qua băng chuyền, bạn có thể thêm và xoá các mục nội dung nghe nhìn khỏi nhóm của trình quản lý tải trước.
- Huỷ các mức độ ưu tiên trong trình quản lý tải trước khi nội dung trong băng chuyền thay đổi hoặc người dùng thay đổi mục mà họ đang phát. Thao tác này yêu cầu trình quản lý tải trước xác định lại mức độ ưu tiên của từng mục nội dung nghe nhìn và tải nội dung nếu cần. Bạn sẽ làm mất hiệu lực trình quản lý tải trước sau khi thêm các mục nội dung nghe nhìn lần đầu tiên, cũng như khi người dùng di chuyển từ mục này sang mục khác hoặc khi bạn thêm hoặc xoá các mục vào băng chuyền.
- Trả lời các truy vấn từ trình quản lý tải trước, cho trình quản lý biết lượng nội dung cần tải trước cho từng mục.
Tìm nạp nội dung nghe nhìn từ trình quản lý tải trước khi người dùng bắt đầu phát một mục. Trình quản lý tải trước sẽ cung cấp cho ứng dụng của bạn một
MediaSource
cho nội dung đó.Giải phóng trình quản lý tải trước khi bạn dùng xong, giải phóng tài nguyên của trình quản lý này.
Trình quản lý tải trước sẽ thực hiện những việc sau:
- Thư viện này theo dõi tất cả các mục nội dung nghe nhìn mà ứng dụng của bạn đã thêm vào.
- Mỗi khi các mức độ ưu tiên của nó bị vô hiệu hoá, nó sẽ truy vấn ứng dụng của bạn bằng cách gọi một
TargetPreloadStatusControl
do ứng dụng của bạn triển khai. Nó gọi phương thức này để tìm hiểu lượng của từng mục nội dung nghe nhìn cần tải. - Sau khi truy vấn ứng dụng, nó sẽ tải trước một lượng thích hợp của từng mục nội dung nghe nhìn. Trình quản lý tải trước sẽ quyết định thứ tự tải mục. Thao tác này ưu tiên những mục gần nhất với mục mà người dùng đang phát.
- Khi ứng dụng yêu cầu nội dung, trình quản lý tải trước sẽ cung cấp một
MediaSource
cùng với mọi nội dung đã được tải.
Quy trình quản lý tải trước
Phần này mô tả quy trình làm việc thông thường cho một ứng dụng sử dụng trình quản lý tải trước. Trong ví dụ này, chúng tôi giả định rằng ứng dụng hiển thị một băng chuyền gồm các video ngắn. Video đã chọn sẽ tự động phát, nhưng người dùng có thể di chuyển băng chuyền theo một trong hai hướng. Thao tác này sẽ dừng video đang phát và bắt đầu video mà họ di chuyển đến.
Tất cả các bước này sẽ được trình bày chi tiết trong các trang sau.
- Ứng dụng tạo một chế độ kiểm soát trạng thái tải trước mục tiêu. Trình quản lý tải trước sẽ truy vấn chế độ kiểm soát này để biết cần tải bao nhiêu phần của mỗi mục nội dung nghe nhìn.
- Ứng dụng tạo một
DefaultPreloadManager.Builder
và truyền chế độ kiểm soát trạng thái tải trước mục tiêu. Sau đó, ứng dụng sử dụng trình tạo để tạo trình quản lý tải trước. - Ứng dụng thêm các mục nội dung nghe nhìn vào trình quản lý tải trước. Ứng dụng cung cấp một chỉ mục cho từng mục, chỉ định vị trí của mục trong băng chuyền.
- Sau khi thêm tất cả nội dung nghe nhìn, ứng dụng sẽ gọi
invalidate()
để cho trình quản lý tải trước biết cách đặt mức độ ưu tiên cho từng mục rồi tải trước các mục đó. - Đối với mỗi mục nội dung nghe nhìn, trình quản lý tải trước sẽ gọi chế độ kiểm soát tải trước mục tiêu để truy vấn xem cần tải bao nhiêu phần của mục đó. Chế độ kiểm soát tải trước mục tiêu có thể cho biết cần tải một khoảng thời gian nhất định của nội dung, chỉ cần tìm nạp siêu dữ liệu của mục hoặc không tìm nạp bất kỳ mục nào tại thời điểm này. Sau khi trình quản lý tải trước nhận được thông tin này, trình quản lý sẽ bắt đầu tải nội dung nghe nhìn.
- Khi người dùng bắt đầu phát nội dung, ứng dụng sẽ gọi trình quản lý tải trước để yêu cầu một
MediaSource
cho mục nội dung nghe nhìn đó. Ứng dụng cũng gọisetCurrentPlayingIndex()
để cho trình quản lý tải trước biết mục nội dung nghe nhìn nào đang được phát. - Nếu người dùng chuyển sang một mục nội dung nghe nhìn khác, ứng dụng sẽ yêu cầu mục đó từ trình quản lý tải trước, đồng thời cập nhật chỉ mục đang phát hiện tại. Sau đó, phương thức này gọi lại
invalidate()
để yêu cầu trình quản lý tải trước cập nhật các mức độ ưu tiên dựa trên nội dung đang phát. - Nếu ứng dụng thêm hoặc xoá các mục nội dung nghe nhìn vào băng chuyền, thì ứng dụng cũng sẽ thêm hoặc xoá các mục đó vào trình quản lý tải trước và gọi
invalidate()
khi hoàn tất việc đó. - Bất cứ khi nào các mức độ ưu tiên của trình quản lý tải trước bị vô hiệu hoá, trình quản lý này sẽ gọi lại chế độ kiểm soát tải trước mục tiêu để tìm hiểu xem cần tải bao nhiêu cho mỗi mục.
- Khi đóng băng chuyền, ứng dụng sẽ giải phóng trình quản lý tải trước để giải phóng tài nguyên.