در صف

چارچوب Cast کلاس‌های صف‌بندی را ارائه می‌دهد که از ایجاد لیست‌هایی از نمونه‌های MediaQueueItem پشتیبانی می‌کنند، که می‌توانند از نمونه‌های MediaInfo مانند جریان‌های ویدیویی یا صوتی ساخته شوند تا به صورت متوالی در گیرنده پخش شوند. این صف از آیتم‌های محتوا را می‌توان ویرایش، مرتب‌سازی مجدد، به‌روزرسانی و غیره کرد.

کیت توسعه نرم‌افزار گیرنده (Receiver SDK) صف را نگهداری می‌کند و تا زمانی که صف حداقل یک آیتم فعال (در حال پخش یا متوقف) داشته باشد، به عملیات روی صف پاسخ می‌دهد. فرستندگان می‌توانند به جلسه بپیوندند و آیتم‌هایی را به صف اضافه کنند. گیرنده، جلسه‌ای را برای آیتم‌های صف نگه می‌دارد تا زمانی که آخرین آیتم پخش را کامل کند یا فرستنده پخش را متوقف کند و جلسه را خاتمه دهد، یا تا زمانی که فرستنده یک صف جدید روی گیرنده بارگذاری کند. گیرنده به طور پیش‌فرض هیچ اطلاعاتی در مورد صف‌های خاتمه یافته نگهداری نمی‌کند. به محض اینکه آخرین آیتم در صف تمام شود، جلسه رسانه پایان می‌یابد و صف ناپدید می‌شود.

ایجاد و بارگذاری موارد صف رسانه

یک آیتم صف رسانه در چارچوب Cast به عنوان یک نمونه MediaQueueItem نمایش داده می‌شود. هنگام ایجاد یک آیتم صف رسانه، اگر از کتابخانه Media Player با محتوای تطبیقی ​​استفاده می‌کنید، می‌توانید زمان پیش‌بارگذاری را طوری تنظیم کنید که پخش‌کننده بتواند قبل از اینکه آیتم جلوی آن در صف پخش شود، شروع به بافر کردن آیتم صف رسانه کند. تنظیم ویژگی autoplay آیتم روی 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 دو کلاس کاربردی برای ایجاد رابط کاربری برای صف‌بندی ارائه می‌دهد.

برای مثال، برای ایجاد یک 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);
}

صف را ویرایش کنید

برای انجام عملیات روی آیتم‌های موجود در صف، از متدهای queue کلاس RemoteMediaClient استفاده کنید. این متدها به شما امکان می‌دهند آرایه‌ای از آیتم‌ها را در یک صف جدید بارگذاری کنید، آیتم‌هایی را در یک صف موجود وارد کنید، ویژگی‌های آیتم‌های موجود در صف را به‌روزرسانی کنید، کاری کنید که یک آیتم در صف به جلو یا عقب برود، ویژگی‌های خود صف را تنظیم کنید (برای مثال، الگوریتم repeatMode که آیتم بعدی را انتخاب می‌کند را تغییر دهید)، آیتم‌ها را از صف حذف کنید و آیتم‌های موجود در صف را دوباره مرتب کنید.