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:
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 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ụngMediaQueue
để thay thế) – Trả về danh sáchMediaQueueItem
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ọigetItemAtIndex()
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.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 hàng đợi.
MediaQueueRecyclerViewAdapter
! để sao lưu dữ liệu củaRecyclerView
MediaQueueListAdapter
! để sao lưu dữ liệu củaListAdapter
.
Ví dụ: để tạo 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 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.