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

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

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

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

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

Kotlin
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() الطريقة - تعرض معرّف السلعة التي يتم تحميلها حاليًا (ولكنها غير نشطة في قائمة الانتظار) على جهاز الاستقبال.
  • getCurrentItemId() الطريقة - تعرض رقم تعريف العنصر الذي كان نشطًا في قائمة الانتظار (قد لا يكون قيد التشغيل) في وقت حدوث تغيير حالة الوسائط.
  • الطريقة getQueueItems() (تم إيقافها نهائيًا، يُرجى استخدام MediaQueue بدلاً منها) - تعرض قائمة مثيلات MediaQueueItem كقائمة غير قابلة للتعديل.

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

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

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

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

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