الوضع في قائمة الانتظار

يوفّر إطار عمل Google Cast فئات قائمة المحتوى التالي التي تتيح إنشاء قوائم بمثيلات MediaQueueItem التي يمكن إنشاؤها من MediaInfo مثيلات مثل عمليات بث الفيديو أو الصوت، ليتم تشغيلها بشكل تسلسلي على المستلِم. يمكن تحرير قائمة الانتظار هذه لعناصر المحتوى وإعادة ترتيبها وتحديثها وما إلى ذلك.

تحتفظ "حزمة تطوير البرامج للمستلِم" بقائمة الانتظار وتستجيب للعمليات المدرجة في قائمة الانتظار طالما أنّ قائمة المحتوى التالي تتضمّن عنصرًا واحدًا على الأقل نشطًا حاليًا (قيد التشغيل أو متوقف مؤقتًا). يمكن للمرسلين الانضمام إلى الجلسة وإضافة عناصر إلى قائمة الانتظار. يحتفظ المستلِم بجلسة عناصر قائمة الانتظار إلى أن يكتمل تشغيل العنصر الأخير أو يوقف المُرسِل التشغيل وينهي الجلسة، أو إلى أن يحمّل المُرسِل قائمة انتظار جديدة على المُستلِم. ولا يحتفظ المُستلِم تلقائيًا بأي معلومات حول قوائم الانتظار التي تم إنهاؤها. بمجرد انتهاء العنصر الأخير في قائمة الانتظار، تنتهي جلسة الوسائط وتختفي قائمة الانتظار.

إنشاء عناصر قائمة انتظار الوسائط وتحميلها

يتم تمثيل عنصر قائمة انتظار الوسائط في إطار عمل البث على شكل مثيل MediaQueueItem. عند إنشاء عنصر قائمة انتظار الوسائط، إذا كنت تستخدم مكتبة مشغّل الوسائط مع المحتوى التكيُّفي، يمكنك ضبط وقت التحميل المسبق لكي يبدأ المشغّل في التخزين المؤقت لعنصر قائمة انتظار الوسائط قبل انتهاء تشغيل العنصر الذي ينتظره في قائمة الانتظار. يؤدي ضبط سمة التشغيل التلقائي للعنصر على "صحيح" إلى السماح للمتلقي بتشغيلها تلقائيًا. على سبيل المثال، يمكنك استخدام نمط أداة إنشاء لإنشاء عنصر قائمة انتظار الوسائط على النحو التالي:

كوتلين
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

يمكنك تحميل مصفوفة من عناصر قائمة انتظار الوسائط في قائمة الانتظار باستخدام طريقة queueLoad المناسبة في RemoteMediaClient.

تلقّي إشعارات عن حالة قائمة انتظار الوسائط

عندما يحمّل المُستلِم عنصرًا لقائمة الوسائط، فإنه يعيّن معرفًا فريدًا للعنصر الذي يستمر طوال مدة الجلسة (ومدة تلك القائمة). يمكن لتطبيقك معرفة حالة قائمة الانتظار من حيث العنصر الذي تم تحميله حاليًا (قد لا يكون قيد التشغيل) أو تحميله أو تحميله مسبقًا. توفّر فئة MediaStatus معلومات الحالة التالية:

  • getPreloadedItemId() : إذا تم تحميل السلعة التالية مسبقًا، يتم عرض معرّف السلعة الذي تم تحميله مسبقًا.
  • getLoadingItemId() method - تعرض معرّف السلعة للعنصر الجاري تحميله (ولكنه ليس نشطًا في قائمة الانتظار) على المستلِم
  • getCurrentItemId() method: تعرض معرّف السلعة الذي كان نشطًا في قائمة الانتظار (على الأرجح أنّه لم يكن قيد التشغيل) في وقت تغيير حالة الوسائط.
  • getQueueItems() (متوقّف نهائيًا، استخدِم MediaQueue بدلاً من ذلك) - يعرض قائمة الحالات MediaQueueItem كقائمة غير قابلة للتعديل.

يمكن لتطبيقك أيضًا الحصول على قائمة العناصر باستخدام الفئة MediaQueue. الفئة هي نموذج بيانات متفرق لقائمة انتظار الوسائط. فهو يحتفظ بقائمة معرّفات العناصر في قائمة الانتظار، والتي تتم مزامنتها تلقائيًا مع المتلقي. لا يحتفظ MediaQueue بجميع MediaQueueItem لأنه يستهلك مساحة كبيرة من الذاكرة عندما تكون قائمة الانتظار طويلة جدًا. بدلاً من ذلك، يجلب العناصر عند الطلب ويحتفظ LruCache بالعناصر التي تم الوصول إليها مؤخرًا. يمكنك استخدام هذه الطرق للوصول إلى قائمة انتظار الوسائط:

  • getItemIds() : لعرض قائمة بجميع معرّفات السلع بالترتيب.
  • getItemAtIndex() method - لعرض العنصر المحفوظ في ذاكرة التخزين المؤقت في فهرس معيّن إذا لم يكن العنصر مخزَّنًا مؤقتًا، سيعرض "MediaQueue" القيمة null ويحدّد موعدًا لجلب السلعة. عند استرجاع العنصر، سيتم استدعاء MediaQueue.Callback#itemsUpdatedAtIndexes()، وسيؤدي الاتصال getItemAtIndex() بالمعرّف نفسه مرة أخرى إلى إرجاع العنصر.
  • تُستخدم السمة fetchMoteItemsRelativeToIndex() عندما يمرّر المستخدم في واجهة المستخدم في قائمة المحتوى التالي إلى الأعلى أو الأسفل، ويريد تطبيقك جلب المزيد من العناصر من السحابة الإلكترونية.

استخدم هذه الطرق مع طرق حالة الوسائط الأخرى لإبلاغ التطبيق بحالة قائمة الانتظار والعناصر الموجودة في قائمة الانتظار. بالإضافة إلى تعديلات حالة الوسائط من المُستلِم، يمكن لتطبيقك رصد التغييرات في قائمة المحتوى التالي من خلال تنفيذ السمتَين RemoteMediaClient.Callback وMediaQueue.Callback.

كما توفّر حزمة تطوير البرامج (SDK) لتكنولوجيا Cast فئتين من الأدوات المساعدة لإنشاء واجهة مستخدم من أجل وضعها في قائمة الانتظار.

على سبيل المثال، لإنشاء 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
}
Java
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 التي تحدد العنصر التالي) وإزالة العناصر من قائمة الانتظار وإعادة ترتيبها.