Danh sách chờ

Khung Cast cung cấp các lớp xếp hàng hỗ trợ việc tạo danh sách / MediaQueueItem thực thể có thể được tạo từ thực thể MediaInfo chẳng hạn như video hoặc âm thanh để phát tuần tự trên bộ thu. Hàng đợi mục nội dung này có thể chỉnh sửa, sắp xếp lại, cập nhật, v.v.

SDK Bộ thu duy trì hàng đợi và phản hồi các hoạt động trên hàng đợi miễn là hàng đợi có ít nhất một mục đang hoạt động (phát hoặc bị tạm dừng). Người gửi có thể tham gia phiên này và thêm các mục vào hàng đợi. Người 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 phát xong hoặc người gửi dừng phát lại và chấm dứt 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 đã chấm dứt. Sau khi mục cuối cùng trong hàng đợi kết thúc thì phiên phát nội dung đa phương tiện kết thúc và hàng đợi biến mất.

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

Một mục hàng đợi nội dung đa phương tiện được biểu thị trong khung Truyền dưới dạng MediaQueueItem thực thể. 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 trình phát nội dung đa phương tiện với 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 mục trong hàng đợi nội dung đa phương tiện vào bộ đệm trước khi mục trước đó trong hàng đợi phát xong. Cài đặt tính năng tự động phát cho mặt hàng thành true cho phép receiver tự động phát video. 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 hàng đợi nội dung đa phương tiện trong hàng đợi bằng cách sử dụng các tệp phù hợp queueLoad 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 hàng đợi đa phương tiện, receiver sẽ chỉ định một mã nhận dạng duy nhất cho mục đó duy trì trong suốt thời gian diễn ra phiên (và vòng đời của hàng đợi). Thông tin ứng dụng có thể tìm hiểu trạng thái của hàng đợi liên quan đến mục nào đang được tải (ứng dụng có thể không phát), đang tải hoặc được tải trước. Chiến lược phát hành đĩa đơn MediaStatus lớp cung cấp thông tin trạng thái sau:

  • getPreloadedItemId() phương thức - Nếu mục tiếp theo đã được tải trước, sẽ trả về ID mục được tải trước.
  • getLoadingItemId() method – Trả về ID mặt hàng của mặt hàng hiện đang tải (nhưng không hoạt động trong hàng đợi) trên receiver.
  • 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 thay đổi trạng thái nội dung nghe nhìn.
  • getQueueItems() (Không dùng nữa, hãy sử dụng MediaQueue để thay thế) – Trả về danh sách MediaQueueItem thực thể dưới dạng danh sách không thể sửa đổi.

Ứng dụng cũng có thể lấy danh sách các mục bằng 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. Nó giữ danh sách ID mục trong hàng đợi, được tự động đồng bộ hoá với trình nhận. MediaQueue không giữ lại tất cả MediaQueueItem vì sẽ tốn quá nhiều bộ nhớ khi hàng đợi quá dài. Thay vào đó, tìm nạp các mặt hàng theo yêu cầu và giữ lại LruCache 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:

  • getItemIds() phương thức – Trả về danh sách tất cả các mã mặt hàng theo thứ tự.
  • getItemAtIndex() phương thức - Trả về mục được lưu trong bộ nhớ đệm tại một chỉ mục nhất định. Nếu mục 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ặt hàng được tìm nạp, MediaQueue.Callback#itemsUpdatedAtIndexes() sẽ được gọi và việc gọi getItemAtIndex() bằng cùng một mã một lần nữa sẽ trả lại thiết bị.
  • fetchMoteItemsRelativeToIndex() được dùng khi người dùng cuộn giao diện người dùng hàng đợi lên trên cùng hoặc xuống dưới cùng và ứng dụng của bạn muốn tìm nạp thêm các 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 nghe nhìn khác để thông báo cho ứng dụng về trạng thái của hàng đợi và các mục trong hàng đợi. Ngoài nội dung cập nhật trạng thái nội dung nghe nhìn từ bộ nhận, ứng dụng của bạn có thể theo dõi những thay đổi đối với bằng cách triển khai hàng đợi RemoteMediaClient.CallbackMediaQueue.Callback.

Ngoài ra, Cast SDK cung cấp 2 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 RemoteMediaClient . Các phương thức 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 các 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, chuyển một mục về trước hoặc về sau 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.