Danh sách chờ

Khung Truyền cung cấp các lớp xếp hàng hỗ trợ việc tạo danh sách thực thể MediaQueueItem (có thể được tạo từ các thực thể MediaInfo như luồng video hoặc âm thanh) để phát tuần tự trên thiết bị nhận. Bạn có thể chỉnh sửa, sắp xếp lại, cập nhật hàng đợi này, v.v.

SDK receiver duy trì hàng đợi và phản hồi các thao tác trong hàng đợi, miễn là hàng đợi đó có ít nhất một mục đang hoạt động (đang phát hoặc tạm dừng). Người gửi có thể tham gia phiên và thêm các mục vào hàng đợi. Trình nhận duy trì một phiên cho các mục trong hàng đợi cho đến khi mục cuối cùng hoàn tất quá trình phát hoặc người gửi dừng quá trình phát và kết thúc phiên đó, hoặc cho đến khi người gửi tải một hàng đợi mới trên receiver. Theo mặc định, trình nhận không duy trì bất kỳ thông tin nào về hàng đợi bị chấm dứt. Sau khi mục cuối cùng trong hàng đợi hoàn tất, phiên phát nội dung đa phương tiện sẽ kết thúc và hàng đợi biến mất.

Tạo và tải các mục trong hàng đợi nội dung nghe nhìn

Một mục trong hàng đợi nội dung đa phương tiện được biểu thị trong khung Truyền dưới dạng một phiên bản MediaQueueItem. Khi tạo một mục trong hàng đợi nội dung đa phương tiện, nếu đang sử dụng Thư viện Media Player có nội dung thích ứng, bạn có thể đặt thời gian tải trước để trình phát có thể bắt đầu lưu vào bộ đệm mục hàng đợi nội dung đa phương tiện trước khi mục trước mục đó trong hàng đợi phát xong. Việc đặt thuộc tính tự động phát của mục thành true (đúng) cho phép bộ nhận tự động phát mục đó. Ví dụ: bạn có thể sử dụng mẫu trình tạo để tạo mục hàng đợi nội dung đa phương tiện như sau:

Kotlin
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

Tải một mảng các mục trong hàng đợi nội dung đa phương tiện trong hàng đợi bằng cách sử dụng phương thức queueLoad thích hợp của RemoteMediaClient.

Nhận thông tin cập nhật về trạng thái của hàng đợi nội dung nghe nhìn

Khi tải một mục trong hàng đợi nội dung đa phương tiện, trình nhận sẽ chỉ định một mã nhận dạng duy nhất cho mục đó. Mục này vẫn tồn tại trong suốt thời gian diễn ra phiên hoạt động (và thời gian tồn tại của hàng đợi). Ứng dụng của bạn có thể tìm hiểu trạng thái của hàng đợi về mặt mục hiện đang được tải (mục có thể không phát), đang tải hoặc đã tải trước. Lớp MediaStatus cung cấp thông tin trạng thái sau:

  • Phương thức getPreloadedItemId() – Nếu mục tiếp theo đã được tải trước, sẽ trả về mã mục được tải trước.
  • Phương thức getLoadingItemId() – Trả về mã mục của mục hiện đang tải (nhưng không hoạt động trong hàng đợi) trên trình nhận.
  • Phương thức getCurrentItemId() – Trả về mã mục của mục đang hoạt động trong hàng đợi (có thể không phát) tại thời điểm trạng thái nội dung đa phương tiện thay đổi.
  • getQueueItems() (Không dùng nữa, hãy chuyển sang dùng MediaQueue) – Trả về danh sách các thực thể MediaQueueItem dưới dạng danh sách không thể sửa đổi.

Ứng dụng của bạn cũng có thể lấy danh sách các mục bằng cách dùng lớp MediaQueue. Lớp này là một mô hình dữ liệu thưa thớt của hàng đợi nội dung đa phương tiện. Hàm này lưu giữ danh sách mã mục trong hàng đợi và được đồng bộ hoá tự động với receiver. MediaQueue không giữ lại tất cả MediaQueueItem vì sẽ chiếm quá nhiều bộ nhớ khi hàng đợi quá dài. Thay vào đó, phương thức này sẽ tìm nạp các mục theo yêu cầu và giữ lại LruCache của các mục đã truy cập gần đây. Bạn có thể sử dụng các phương thức sau để truy cập vào hàng đợi nội dung nghe nhìn:

  • Phương thức getItemIds() – Trả về danh sách tất cả mã mặt hàng theo thứ tự.
  • Phương thức getItemAtIndex() – Trả về mục đã lưu vào bộ nhớ đệm tại một chỉ mục nhất định. Nếu mục này không được lưu vào bộ nhớ đệm, MediaQueue sẽ trả về null và lên lịch tìm nạp mục đó. Khi mục được tìm nạp, MediaQueue.Callback#itemsUpdatedAtIndexes() sẽ được gọi và việc gọi lại getItemAtIndex() có cùng mã nhận dạng sẽ trả về mục đó.
  • fetchMoteItemsRelativeToIndex() được sử dụng khi người dùng cuộn giao diện người dùng của hàng đợi lên trên cùng hoặc dưới cùng, đồng thời ứng dụng của bạn muốn tìm nạp thêm mục từ đám mây.

Hãy sử dụng các phương thức này cùng với các phương thức trạng thái nội dung đa phương tiện khác để thông báo cho ứng dụng của bạn về trạng thái của hàng đợi và các mục trong hàng đợi. Ngoài các thông tin cập nhật về trạng thái nội dung nghe nhìn từ dịch vụ nhận, ứng dụng của bạn có thể theo dõi các thay đổi đối với hàng đợi bằng cách triển khai RemoteMediaClient.CallbackMediaQueue.Callback.

Ngoài ra, Cast SDK cung cấp hai lớp tiện ích để tạo giao diện người dùng cho hàng đợi.

Ví dụ: để tạo RecyclerView bằng MediaQueueRecyclerViewAdapter:

Kotlin
class MyRecyclerViewAdapter(mediaQueue: MediaQueue?) :
    MediaQueueRecyclerViewAdapter<MyViewHolder?>(mediaQueue) {
    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val item = getItem(position)

        // Update the view using `item`.
        ...
    }
}

class MyViewHolder : RecyclerView.ViewHolder {
    // Implement your own ViewHolder.
    ...
}

fun someMethod() {
    val adapter = MyRecyclerViewAdapter(
        mCastSession.remoteMediaClient.getMediaQueue())
    val recyclerView =
        activity.findViewById(R.id.my_recycler_view_id) as RecyclerView
    recyclerView.adapter = adapter
}
Java
public class MyRecyclerViewAdapter extends MediaQueueRecyclerViewAdapter<MyViewHolder> {
    public MyRecyclerViewAdapter(MediaQueue mediaQueue) {
        super(mediaQueue);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
      MediaQueueItem item = getItem(position);

      // Update the view using `item`.
      ...
    }
}

public class MyViewHolder implements RecyclerView.ViewHolder {
  // Implement your own ViewHolder.
  ...
}

public void someMethod() {
    RecyclerView.Adapter adapter = new MyRecyclerViewAdapter(
        mCastSession.getRemoteMediaClient().getMediaQueue());
    RecyclerView recyclerView =
        (RecyclerView) getActivity().findViewById(R.id.my_recycler_view_id);
    recyclerView.setAdapter(adapter);
}

Chỉnh sửa hàng đợi

Để thao tác trên các mục trong hàng đợi, hãy sử dụng các phương thức hàng đợi của lớp RemoteMediaClient. Các lệnh này cho phép bạn tải một mảng các mục vào hàng đợi mới, chèn mục vào hàng đợi hiện có, cập nhật thuộc tính của các mục trong hàng đợi, làm cho một mục chuyển lên hoặc lùi lại trong hàng đợi, đặt thuộc tính của chính hàng đợi đó (ví dụ: thay đổi thuật toán repeatMode chọn mục tiếp theo), xoá các mục khỏi hàng đợi và sắp xếp lại các mục trong hàng đợi.