چارچوب Cast کلاسهای صفی را ارائه میکند که از ایجاد فهرستهایی از نمونههای MediaQueueItem
پشتیبانی میکنند، که میتوانند از نمونههای MediaInfo
مانند جریانهای ویدیویی یا صوتی ساخته شوند تا بهطور متوالی روی گیرنده پخش شوند. این صف از آیتم های محتوا را می توان ویرایش، مرتب سازی مجدد، به روز رسانی و غیره انجام داد.
Receiver SDK تا زمانی که صف دارای حداقل یک مورد فعال (در حال پخش یا توقف) باشد، صف را حفظ می کند و به عملیات روی صف پاسخ می دهد. فرستنده ها می توانند به جلسه بپیوندند و موارد را به صف اضافه کنند. گیرنده یک جلسه را برای آیتم های صف نگه می دارد تا زمانی که آخرین آیتم پخش را کامل کند یا فرستنده پخش را متوقف کند و جلسه را خاتمه دهد، یا تا زمانی که فرستنده یک صف جدید را روی گیرنده بارگذاری کند. گیرنده به طور پیش فرض هیچ اطلاعاتی در مورد صف های پایان یافته نگهداری نمی کند. پس از اتمام آخرین مورد در صف، جلسه رسانه به پایان می رسد و صف ناپدید می شود.
موارد صف رسانه را ایجاد و بارگیری کنید
یک آیتم صف رسانه در چارچوب Cast به عنوان یک نمونه MediaQueueItem
نشان داده می شود. وقتی یک آیتم صف رسانه ایجاد میکنید، اگر از کتابخانه Media Player با محتوای تطبیقی استفاده میکنید، میتوانید زمان پیشبارگذاری را طوری تنظیم کنید که پخشکننده بتواند قبل از اینکه آیتم جلوتر از آن در صف پخش شود، شروع به بافر کردن آیتم صف رسانهای کند. تنظیم ویژگی پخش خودکار مورد روی 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()
- اگر مورد بعدی از قبل بارگذاری شده باشد، شناسه مورد از پیش بارگذاری شده را برمی گرداند. - متد
getLoadingItemId()
- شناسه مورد موردی را که در حال بارگیری (اما در صف فعال نیست) روی گیرنده برمیگرداند. - متد
getCurrentItemId()
- شناسه مورد موردی را که در زمان تغییر وضعیت رسانه در صف فعال بود (ممکن است پخش نشود) را برمیگرداند. - متد
getQueueItems()
( منسوخ شده، به جای آن ازMediaQueue
استفاده کنید ) - لیست نمونه هایMediaQueueItem
را به عنوان یک لیست غیرقابل تغییر برمی گرداند.
برنامه شما همچنین میتواند فهرست موارد را با استفاده از کلاس MediaQueue
دریافت کند. کلاس یک مدل داده پراکنده از صف رسانه است. لیست شناسه های اقلام را در صف نگه می دارد که به طور خودکار با گیرنده همگام می شود. MediaQueue
تمام MediaQueueItem
را نگه نمیدارد، زیرا زمانی که صف بسیار طولانی باشد، حافظه زیادی میگیرد. در عوض، اقلام را بر حسب تقاضا واکشی می کند و یک LruCache
از مواردی که اخیراً به آنها دسترسی داشته اید را نگه می دارد. برای دسترسی به صف رسانه می توانید از این روش ها استفاده کنید:
- متد
getItemIds()
- لیست تمام شناسه های آیتم ها را به ترتیب برمی گرداند. - متد
getItemAtIndex()
- آیتم کش شده را در یک شاخص معین برمی گرداند. اگر آیتم کش نباشد،MediaQueue
null
را برمیگرداند و برای واکشی مورد برنامهریزی میکند. هنگامی که مورد واکشی شد،MediaQueue.Callback#itemsUpdatedAtIndexes()
فراخوانی می شود و با فراخوانی مجددgetItemAtIndex()
مورد را برمی گرداند. -
fetchMoteItemsRelativeToIndex()
زمانی استفاده می شود که کاربر رابط کاربری صف را به بالا یا پایین پیمایش کند و برنامه شما بخواهد موارد بیشتری را از ابر واکشی کند.
از این روش ها همراه با سایر روش های وضعیت رسانه استفاده کنید تا برنامه خود را در مورد وضعیت صف و موارد موجود در صف مطلع کنید. علاوه بر بهروزرسانیهای وضعیت رسانه از گیرنده، برنامه شما میتواند با اجرای RemoteMediaClient.Callback
و MediaQueue.Callback
به تغییرات در صف گوش دهد.
همچنین، Cast SDK دو کلاس کاربردی برای ایجاد UI برای صفبندی فراهم میکند.
-
MediaQueueRecyclerViewAdapter
، برای پشتیبان گیری از داده هایRecyclerView
-
MediaQueueListAdapter
، برای پشتیبان گیری از داده های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
را تغییر دهید که مورد بعدی را انتخاب می کند)، موارد را از صف حذف کنید و موارد موجود در صف را دوباره ترتیب دهید.