Các khái niệm về trình quản lý tải trước

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. Trình quản lý này cũng cho phép bạn tuỳ chỉnh thời lượng và thứ hạng của quá trình tải trước cho mỗi mục.

Một tình huống thường gặp trên mạng xã hội là ứng dụng hiển thị danh sách hoặc băng chuyền các lựa chọn nội dung nghe nhìn cho người dùng. Ví dụ: một ứng dụng có thể hiển thị băng chuyền các video ngắn. Khi một video kết thúc, ứng dụng sẽ chuyển sang video tiếp theo. Và nếu không thích video đang xem, người dùng có thể vuốt để chuyển sang video tiếp theo hoặc video trước đó.

Nếu bạn không tải trước nội dung video, điều này có thể dẫn đến trải nghiệm người dùng khó chịu. Người dùng xem xong một số nội dung nghe nhìn rồi phải chờ 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àm tiêu hao năng lượng và băng thông mạng để 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 phù hợp.

Phân công công việc

Nếu bạn sử dụng DefaultPreloadManager, thì 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 do trình quản lý tải trước thực hiện.

Ứng dụng của bạn phải làm 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ượng DefaultPreloadManager.Builder mà bạn dùng để tạo trình quản lý tải trước. Gọi DefaultPreloadManager.Builder.buildExoPlayer() để tạo ExoPlayer.
  • 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 cần theo dõi. Đây có thể không phải là tất cả nội dung trong băng chuyền; thay vào đó, bạn chỉ cần cho trình quản lý này biết về 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.
  • Vô hiệu hoá 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. Điều này cho trình quản lý tải trước biết để 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ẽ vô hiệu hoá 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 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 khỏi băng chuyền.
  • Phản hồ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 mỗi 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 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 hoàn tất, 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 thực hiện những việc sau:

  • Trình quản lý 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 mức độ ưu tiên bị vô hiệu hoá, trình quản lý này sẽ truy vấn ứng dụng của bạn bằng cách gọi a TargetPreloadStatusControl do ứng dụng của bạn triển khai. Trình quản lý này gọi để 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, trình quản lý này sẽ tải trước lượng phù hợp của từng mục nội dung nghe nhìn. Trình quản lý tải trước quyết định thứ tự tải mục. Trình quản lý này ưu tiên các 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 MediaSource với bất kỳ nội dung nào đã được tải.

Quy trình làm việc của trình quản lý tải trước

Phần này mô tả quy trình làm việc điển hình 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ị băng chuyền các video ngắn. Video đã chọn sẽ tự động phát, nhưng người dùng có thể cuộ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ọ cuộn đến.

Tất cả các bước này được thảo luận chi tiết trong các trang sau.

  1. Ứng dụng tạo một chế độ điều khiển trạng thái tải trước mục tiêu. Trình quản lý tải trước truy vấn chế độ điều khiển này để tìm hiểu lượng của từng mục nội dung nghe nhìn cần tải.
  2. Ứng dụng tạo DefaultPreloadManager.Builder và chuyển chế độ điều khiển 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.
  3. Ứ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.
  4. 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 đặt mức độ ưu tiên cho từng mục rồi tải trước các mục đó.
  5. Đố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ế độ điều khiển tải trước mục tiêu để truy vấn lượng của mục cần tải. Chế độ điều khiển tải trước mục tiêu có thể cho biết tải một khoảng thời lượng nội dung nhất định, chỉ 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ý này sẽ bắt đầu tải nội dung nghe nhìn.
  6. 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 MediaSource cho mục nội dung nghe nhìn đó. Ứng dụng cũng gọi setCurrentPlayingIndex() để 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.
  7. 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 và cũng cập nhật chỉ mục phát hiện tại. Sau đó, ứng dụng gọi lại invalidate() để cho trình quản lý tải trước biết cập nhật mức độ ưu tiên dựa trên nội dung đang phát.
  8. Nếu ứng dụng thêm hoặc xoá các mục nội dung nghe nhìn khỏi băng chuyền, thì ứng dụng cũng thêm hoặc xoá các mục đó khỏi trình quản lý tải trước và gọi invalidate() khi hoàn tất.
  9. Bất cứ khi nào 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ế độ điều khiển tải trước mục tiêu để tìm hiểu lượng của từng mục cần tải.
  10. Khi ứng dụng đó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 của trình quản lý này.