در صف

چارچوب 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 برای صف‌بندی فراهم می‌کند.

به عنوان مثال، برای ایجاد یک 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 را تغییر دهید که مورد بعدی را انتخاب می کند)، موارد را از صف حذف کنید و موارد موجود در صف را دوباره ترتیب دهید.