Trang này mô tả cách sử dụng trình quản lý tải trước để quản lý nội dung video. Bằng cách sử dụng trình quản lý tải trước, bạn có thể mang lại cho người dùng trải nghiệm tốt hơn; khi người dùng chuyển từ mục nội dung nghe nhìn này sang mục nội dung nghe nhìn khác, quá trình phát sẽ bắt đầu nhanh hơn vì trình quản lý đã tải một số nội dung.
Trang này bao gồm các chủ đề sau:
- Thêm mục nội dung nghe nhìn vào trình quản lý tải trước
- Tìm nạp và phát nội dung nghe nhìn
- Xoá các mục khỏi trình quản lý tải trước
- Giải phóng trình quản lý tải trước khi bạn hoàn tất
Thêm các mục nội dung nghe nhìn vào trình quản lý tải trước
Bạn phải 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. Ví dụ: nếu ứng dụng của bạn có một băng chuyền video, bạn sẽ thêm các video đó vào trình quản lý tải trước. Tuỳ thuộc vào trường hợp sử dụng, bạn có thể thêm tất cả video hoặc chỉ thêm tất cả video gần video đang phát. Bạn cũng có thể thêm các mục mới vào trình quản lý tải trước sau này.
Để làm việc này, hãy sử dụng phương thức thêm theo lô như addMediaItems (hoặc addMediaSources). Ngoài ra, bạn có thể gọi add (hoặc addMediaSource) để thêm từng mục nội dung nghe nhìn. Tuy nhiên, việc thêm từng mục nội dung nghe nhìn sẽ không tự động kích hoạt tính năng tải trước. Khi sử dụng các phương thức riêng lẻ, bạn phải gọi invalidate một cách rõ ràng sau khi thêm xong các mục để yêu cầu trình quản lý tải trước cập nhật mức độ ưu tiên và bắt đầu tải trước.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
Các điểm chính về mã
- Đoạn mã này cho biết cách điền sẵn dữ liệu ban đầu vào trình quản lý tải trước ở chế độ hàng loạt sau khi bạn tạo trình quản lý này. Bạn có thể gọi
addMediaItemsđể thêm các mục vào trình quản lý tải trước hiện có và đã được điền sẵn. - Trong đoạn mã này,
pullMediaItemsFromService()là logic của ứng dụng để tìm nạp danh sách nội dung cần phát. Mã gọi phương thức đó để tìm nạp danh sách có tối đa 20 mục. preloadManagerlàDefaultPreloadManagerđược tạo trong phần TạoDefaultPreloadManager.rankingDatalà giá trị mà trình quản lý tải trước sử dụng để xác định mức độ ưu tiên của từng mục nội dung nghe nhìn. Đối vớiDefaultPreloadManager,rankingDatalà một số nguyên đại diện cho vị trí của mục trong băng chuyền. Trình quản lý tải trước xác định mức độ ưu tiên dựa trên khoảng cách giữa mỗi mục và mục đang phát.
Tìm nạp và phát nội dung nghe nhìn
Khi người dùng chuyển sang một mục nội dung nghe nhìn mới, bạn cần lấy mục nội dung nghe nhìn đó từ trình quản lý tải trước. Nếu trình quản lý tải trước đã tải bất kỳ nội dung nào, thì nội dung đó sẽ phát nhanh hơn so với khi bạn không sử dụng trình quản lý tải trước. Nếu trình quản lý tải trước chưa tải nội dung từ mục đó, thì nội dung sẽ phát bình thường.
Bạn cũng cần cập nhật chỉ mục đang phát hiện tại trên trình quản lý tải trước bằng cách gọi setCurrentPlayingIndex. Thao tác này cho phép trình quản lý tải trước xác định mức độ ưu tiên của các thao tác tải trước trong tương lai.
// When a media item is about to be displayed on the screen val mediaSource = preloadManager.getMediaSource(mediaItem) if (mediaSource != null) { player.setMediaSource(mediaSource) } else { // If the mediaSource is null, its mediaItem hasn't been added to the preload // manager yet. Send it directly to the player when it's about to play. player.setMediaItem(mediaItem) } player.prepare() // When the media item is being displayed at the center of the screen ("in focus") player.play() // Update the current playing index to let the preload manager know where the user // is in the carousel/pagination/list. preloadManager.setCurrentPlayingIndex(currentIndex)
Các điểm chính về mã
playerlàExoPlayerMedia3 mà ứng dụng đang dùng để phát nội dung. Bạn phải tạo trình phát đó bằng cách gọiDefaultPreloadManager.Builder.buildExoPlayer()trên cùng một trình tạo mà bạn đã dùng để tạo trình quản lý tải trước.- Khi người dùng chuyển sang một mục nội dung nghe nhìn mới, ứng dụng sẽ gọi
getMediaSource()để lấy nguồn nội dung nghe nhìn từ trình quản lý tải trước. Đây phải làmediaItemmà bạn đã thêm vào trình quản lý tải trước. Nếu trình quản lý tải trước chưa bắt đầu tải nội dung thì cũng không sao; trong trường hợp đó, trình quản lý sẽ trả về mộtMediaSourcekhông có dữ liệu tải trước. Ví dụ: điều này có thể xảy ra nếu người dùng đột ngột chuyển đến vị trí xa hơn trong băng chuyền. - Sau khi người dùng phát mục nội dung nghe nhìn mới, hãy gọi
setCurrentPlayingIndexđể cho trình quản lý tải trước biết vị trí của mục mới trong băng chuyền. Trình quản lý tải trước cần thông tin đó để ưu tiên tải mục tiếp theo.
Xoá các mục khỏi trình quản lý tải trước
Để trình quản lý tải trước hoạt động hiệu quả, bạn nên xoá những mục mà trình quản lý tải trước không cần theo dõi nữa. Bạn cũng có thể xoá các mục vẫn còn trong băng chuyền nhưng ở xa vị trí hiện tại của người dùng. Ví dụ: bạn có thể quyết định rằng nếu một mục cách mục mà người dùng đang xem hơn 15 mục, thì mục đó không cần được tải trước. Trong trường hợp đó, bạn sẽ xoá các mục khi chúng di chuyển ra xa đến mức đó. Nếu người dùng quay lại các mục đã xoá, bạn luôn có thể thêm lại các mục đó.
Nếu có danh sách các mục nội dung nghe nhìn cần xoá, bạn có thể sử dụng removeMediaItems (hoặc removeMediaSources). Ngoài ra, bạn có thể gọi remove (hoặc removeMediaSource) để xoá từng mục nội dung nghe nhìn.
preloadManager.removeMediaItems(mediaItemsToRemove)
Các điểm chính về mã
- Nếu muốn xoá tất cả các mục khỏi trình quản lý tải trước, bạn có thể gọi
reset()thay vìremove(). Phương pháp này hữu ích nếu bạn cần thay đổi tất cả các mục trong băng chuyền. Trong trường hợp đó, sau khi xoá các mục, bạn cần thêm các mục mới vào trình quản lý tải trước.
Giải phóng trình quản lý tải trước khi bạn hoàn tất
Khi không cần trình quản lý tải trước nữa, bạn phải giải phóng trình quản lý này để giải phóng tài nguyên. Cụ thể, hãy nhớ huỷ đăng ký khi hoạt động của bạn bị huỷ.
preloadManager.release()
Các điểm chính về mã
- Bạn không được gọi bất kỳ phương thức nào của đối tượng sau khi phát hành đối tượng đó.
- Nếu bạn cần tạo một trình quản lý tải trước khác, hãy tạo một
DefaultPreloadManager.Buildermới và dùng trình quản lý đó để tạoDefaultPreloadManager. Đừng cố gắng sử dụng lại trình tạo cũ.