Khung Cast cung cấp các lớp xếp hàng hỗ trợ việc tạo danh sách các thực thể MediaQueueItem
. Các thực thể này có thể được tạo từ các thực thể MediaInfo
, chẳng hạn như luồng video hoặc âm thanh, để phát tuần tự trên bộ nhận. Bạn có thể chỉnh sửa, sắp xếp lại, cập nhật, v.v. hàng đợi các mục nội dung này.
Receiver SDK duy trì hàng đợi và phản hồi các thao tác trên hàng đợi miễn là hàng đợi có ít nhất một mục hiện đ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 danh sách chờ. Thiết bị 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 thiết bị nhận. Theo mặc định, máy nhận không duy trì bất kỳ thông tin nào về các hàng đợi đã kết thúc. Sau khi mục cuối cùng trong danh sách chờ kết thúc, phiên phát nội dung nghe nhìn sẽ kết thúc và danh sách chờ sẽ 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 nghe nhìn được biểu thị trong khung Cast 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 nghe nhìn, nếu đang dùng Thư viện trình phát nội dung nghe nhì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 vào bộ nhớ đệm mục trong hàng đợi nội dung nghe nhìn trước khi mục trước đó trong hàng đợi phát xong. Khi bạn đặt thuộc tính tự động phát của mục thành true, receiver sẽ 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 trong hàng đợi nội dung nghe nhìn như sau:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
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 nghe nhìn vào 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 hàng đợi nội dung nghe nhìn
Khi tải một mục trong hàng đợi nội dung nghe nhìn, bộ nhận sẽ chỉ định một mã nhận dạng duy nhất cho mục đó. Mã này sẽ duy trì trong suốt phiên (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ục hiện đang được tải (có thể không phát), đang tải hoặc được tải trước. Lớp MediaStatus
cung cấp thông tin trạng thái này:
- Phương thức
getPreloadedItemId()
– Nếu mục tiếp theo đã được tải trước, hãy trả về mã nhận dạng mục được tải trước. - Phương thức
getLoadingItemId()
– Trả về mã 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 thiết bị nhận. - Phương thức
getCurrentItemId()
– Trả về mã nhận dạng của mục đang hoạt động trong hàng đợi (mục đó có thể không phát) tại thời điểm xảy ra thay đổi về trạng thái nội dung nghe nhìn. - Phương thức
getQueueItems()
(Không dùng nữa, hãy dùngMediaQueue
thay thế) – Trả về danh sách các thực thểMediaQueueItem
dưới dạng một 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 sử 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 nghe nhìn. Nó lưu giữ danh sách mã nhận dạng mục trong hàng đợi, danh sách này sẽ tự động đồng bộ hoá với bộ nhận.
MediaQueue
không lưu giữ tất cả MediaQueueItem
vì việc này sẽ chiếm quá nhiều bộ nhớ khi hàng đợi quá dài. Thay vào đó, nó sẽ tìm nạp các mục theo yêu cầu và lưu giữ LruCache
các mục đượ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 được lưu vào 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ục được tìm nạp,MediaQueue.Callback#itemsUpdatedAtIndexes()
sẽ được gọi và việc gọigetItemAtIndex()
bằng cùng một mã nhận dạng một lần nữa sẽ trả về mục đó. 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 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 thông tin cập nhật về trạng thái nội dung nghe nhìn từ thiết bị 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.Callback
và MediaQueue.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 việc xếp hàng.
MediaQueueRecyclerViewAdapter
, để sao lưu dữ liệu củaRecyclerView
MediaQueueListAdapter
, để sao lưu dữ liệu củaListAdapter
.
Ví dụ: để tạo một RecyclerView
bằng MediaQueueRecyclerViewAdapter
:
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 }
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 dùng các phương thức hàng đợi của lớp RemoteMediaClient
. Các thao tá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 các thuộc tính của các mục trong hàng đợi, làm cho một mục chuyển tiếp hoặc quay lại trong hàng đợi, đặt các 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.