در صف گذاشتن

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

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

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

یک مورد صف رسانه در چارچوب Cast به‌عنوان یک نمونه MediaQueueItem نمایش داده می‌شود. وقتی مورد صف رسانه ایجاد می‌کنید، اگر از کتابخانه پخش‌کننده رسانه با محتوای تطبیقی استفاده می‌کنید، می‌توانید زمان پیش‌بارگیری را تنظیم کنید تا پخش‌کننده بتواند میان‌گیری مورد صف رسانه را قبل‌از اینکه پخش مورد قبلی در صف تمام شود شروع کند. تنظیم کردن مشخصه پخش خودکار مورد روی true به گیرنده اجازه می‌دهد آن را به‌طور خودکار پخش کند. برای مثال، می‌توانید از الگوی سازنده برای ایجاد مورد صف رسانه به‌صورت زیر استفاده کنید:

Kotlin
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. اگر مورد در حافظه پنهان نباشد، MediaQueue null را برمی‌گرداند و برای واکشی مورد زمان‌بندی می‌کند. وقتی مورد واکشی شود، MediaQueue.Callback#itemsUpdatedAtIndexes() فراخوانده می‌شود و فراخوانی دوباره getItemAtIndex() با همان شناسه مورد را برمی‌گرداند.
  • fetchMoteItemsRelativeToIndex() زمانی استفاده می‌شود که کاربر میانای کاربری صف را به بالا یا پایین پیمایش می‌کند، و برنامه شما می‌خواهد موارد بیشتری را از فضای ابری واکشی کند.

از این روش‌ها همراه با دیگر روش‌های وضعیت رسانه استفاده کنید تا برنامه‌تان را از وضعیت صف و موارد موجود در صف مطلع کنید. علاوه‌بر به‌روزرسانی‌های وضعیت رسانه از گیرنده، برنامه شما می‌تواند با پیاده‌سازی RemoteMediaClient.Callback و MediaQueue.Callback، تغییرات صف را گوش دهد.

همچنین، Cast SDK دو کلاس کاربردی برای ایجاد واسط کاربر برای صف‌بندی ارائه می‌دهد.

برای مثال، برای ایجاد RecyclerView بااستفاده از MediaQueueRecyclerViewAdapter:

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