چارچوب Cast کلاسهای صفبندی را ارائه میدهد که از ایجاد فهرستهای نمونههای MediaQueueItem پشتیبانی میکنند. این فهرستها را میتوان از نمونههای MediaInfo مانند جاریسازیهای صوتی یا ویدیویی ساخت تا بهصورت متوالی در گیرنده پخش شوند. این صف از موارد محتوا
میتواند ویرایش، مرتبسازی مجدد، بهروزرسانی و غیره شود.
Receiver SDK صف را حفظ میکند و تا زمانی که صف حداقل یک مورد فعال (درحال پخش یا مکث) داشته باشد، به عملیات در صف پاسخ میدهد. فرستندگان میتوانند به جلسه بپیوندند و مواردی را به صف اضافه کنند. گیرنده جلسهای را برای موارد صف حفظ میکند تا زمانی که آخرین مورد بازپخش را تکمیل کند یا فرستنده بازپخش را متوقف کند و جلسه را خاتمه دهد، یا تا زمانی که فرستنده صف جدیدی را در گیرنده بارگیری کند. گیرنده بهطور پیشفرض هیچ اطلاعاتی درباره صفهای پایانیافته نگهداری نمیکند. وقتی آخرین مورد در صف تمام میشود، جلسه رسانه بهپایان میرسد و صف ناپدید میشود.
ایجاد و بار کردن موارد صف رسانه
یک مورد صف رسانه در چارچوب Cast بهعنوان یک نمونه
MediaQueueItem
نمایش داده میشود.
وقتی مورد صف رسانه ایجاد میکنید، اگر از کتابخانه پخشکننده رسانه با محتوای تطبیقی استفاده میکنید، میتوانید زمان پیشبارگیری را تنظیم کنید تا پخشکننده بتواند میانگیری مورد صف رسانه را قبلاز اینکه پخش مورد قبلی در صف تمام شود شروع کند. تنظیم کردن مشخصه پخش خودکار مورد روی true به گیرنده اجازه میدهد آن را بهطور خودکار پخش کند. برای مثال،
میتوانید از الگوی سازنده برای ایجاد مورد صف رسانه بهصورت زیر استفاده کنید:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
آرایهای از موارد صف رسانه را بااستفاده از روش مناسب
queueLoad
RemoteMediaClient در صف بار کنید.
دریافت بهروزرسانیهای وضعیت صف رسانه
وقتی گیرنده مورد صف رسانه را بار میکند، شناسه یکتایی به آن مورد اختصاص میدهد
که در طول جلسه (و عمر صف) باقی میماند. برنامه شما میتواند از وضعیت صف مطلع شود، مثلاً اینکه کدام مورد درحالحاضر بار شده است (ممکن است درحال پخش نباشد)، درحال بار شدن است، یا ازقبل بار شده است. کلاس
MediaStatus
این اطلاعات وضعیت را ارائه میدهد:
getPreloadedItemId()method - If the next item has been preloaded, returns the preloaded item ID.getLoadingItemId()method - شناسه موردی را که درحالحاضر درحال بار شدن است (اما در صف فعال نیست) در گیرنده برمیگرداند.getCurrentItemId()method - شناسه مورد موردی را که در زمان تغییر وضعیت رسانه در صف فعال بوده است (ممکن است درحال پخش نباشد) برمیگرداند.getQueueItems()(منسوخشده، بهجای آن ازMediaQueueاستفاده کنید) روش - فهرست نمونههایMediaQueueItemرا بهعنوان فهرست غیرقابلتغییر برمیگرداند.
برنامه شما همچنین میتواند فهرست موارد را بااستفاده از کلاس
MediaQueue
دریافت کند. کلاس یک مدل داده پراکنده از صف رسانه است. این کلاس فهرست شناسههای موارد را در صف نگه میدارد که بهطور خودکار با گیرنده همگامسازی میشود.
MediaQueue همه
MediaQueueItem
را نگه نمیدارد زیرا وقتی صف خیلی طولانی باشد، حافظه زیادی اشغال میشود. درعوض،
موارد را درصورت درخواست واکشی میکند و LruCache
مواردی را که اخیراً به آنها دسترسی داشتهاید نگه میدارد. میتوانید از این روشها برای دسترسی به صف رسانه استفاده کنید:
getItemIds()method - فهرست همه شناسههای مورد را بهترتیب برمیگرداند.getItemAtIndex()method - Returns the cached item at a given index. اگر مورد در حافظه پنهان نباشد،MediaQueuenullرا برمیگرداند و برای واکشی مورد زمانبندی میکند. وقتی مورد واکشی شود،MediaQueue.Callback#itemsUpdatedAtIndexes()فراخوانده میشود و فراخوانی دوبارهgetItemAtIndex()با همان شناسه مورد را برمیگرداند.fetchMoteItemsRelativeToIndex()زمانی استفاده میشود که کاربر میانای کاربری صف را به بالا یا پایین پیمایش میکند، و برنامه شما میخواهد موارد بیشتری را از فضای ابری واکشی کند.
از این روشها همراه با دیگر روشهای وضعیت رسانه استفاده کنید تا برنامهتان را از وضعیت صف و موارد موجود در صف مطلع کنید. علاوهبر بهروزرسانیهای وضعیت رسانه از گیرنده، برنامه شما میتواند با پیادهسازی RemoteMediaClient.Callback و MediaQueue.Callback، تغییرات صف را گوش دهد.
همچنین، Cast SDK دو کلاس کاربردی برای ایجاد واسط کاربر برای صفبندی ارائه میدهد.
MediaQueueRecyclerViewAdapter، برای پشتیبانگیری از دادههایRecyclerViewMediaQueueListAdapter، برای پشتیبانگیری از دادههایListAdapter.
برای مثال، برای ایجاد RecyclerView بااستفاده از 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); }
ویرایش صف پخش
برای انجام عملیات روی موارد موجود در صف، از روشهای صف کلاس
RemoteMediaClient
استفاده کنید. اینها به شما امکان میدهند آرایهای از موارد را در یک صف جدید بارگیری کنید، موارد را در یک صف موجود درج کنید، ویژگیهای موارد در صف را بهروزرسانی کنید، یک مورد را در صف به جلو یا عقب ببرید، ویژگیهای خود صف را تنظیم کنید (برای مثال، الگوریتم repeatMode را که مورد بعدی را انتخاب میکند تغییر دهید)، موارد را از صف حذف کنید و ترتیب موارد در صف را تغییر دهید.