يوفّر إطار عمل Cast فئات وضع في قائمة الانتظار تتيح إنشاء قوائم من مثيلات
MediaQueueItem
، التي يمكن إنشاؤها من مثيلات MediaInfo، مثل بث الفيديو أو الصوت
، لتشغيلها بالتسلسل على جهاز الاستقبال. يمكن تعديل قائمة انتظار عناصر المحتوى هذه وإعادة ترتيبها وتحديثها وما إلى ذلك.
تحتفظ حزمة تطوير البرامج (SDK) لجهاز الاستقبال بصفّ الانتظار وتستجيب للعمليات التي يتم إجراؤها على الصفّ طالما أنّ الصفّ يتضمّن عنصرًا واحدًا على الأقل نشطًا حاليًا (يتم تشغيله أو إيقافه مؤقتًا). يمكن لأجهزة الإرسال الانضمام إلى الجلسة وإضافة عناصر إلى قائمة الانتظار. يحتفظ جهاز الاستقبال بجلسة لعناصر قائمة الانتظار إلى أن يكتمل تشغيل آخر عنصر أو أن يوقف جهاز الإرسال التشغيل وينهي الجلسة، أو إلى أن يحمّل جهاز إرسال قائمة انتظار جديدة على جهاز الاستقبال. لا يحتفظ جهاز الاستقبال بأي معلومات عن قوائم الانتظار التي تم إنهاؤها تلقائيًا. بعد انتهاء آخر عنصر في قائمة الانتظار، تنتهي جلسة الوسائط وتختفي قائمة الانتظار.
إنشاء عناصر قائمة انتظار الوسائط وتحميلها
يتم تمثيل عنصر قائمة انتظار الوسائط في إطار عمل Cast كـ
MediaQueueItem
مثيل.
عند إنشاء عنصر قائمة انتظار الوسائط، إذا كنت تستخدِم مكتبة مشغّل الوسائط مع المحتوى التكيّفي، يمكنك ضبط وقت التحميل المسبق لكي يتمكّن المشغّل من بدء تخزين عنصر قائمة انتظار الوسائط مؤقتًا قبل انتهاء تشغيل العنصر الذي يسبقه في قائمة الانتظار. يؤدي ضبط سمة التشغيل التلقائي للعنصر على "صحيح" إلى السماح لجهاز الاستقبال بتشغيله تلقائيًا. على سبيل المثال، يمكنك استخدام نمط أداة الإنشاء لإنشاء عنصر قائمة انتظار الوسائط على النحو التالي:
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.
توفّر حزمة تطوير البرامج (SDK) لـ Cast أيضًا فئتَين للأدوات المساعدة لإنشاء واجهة مستخدم لوضع المحتوى في قائمة الانتظار.
MediaQueueRecyclerViewAdapter، لدعم بياناتRecyclerViewMediaQueueListAdapter، لدعم بياناتListAdapter
على سبيل المثال، لإنشاء 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 التي تحدّد العنصر التالي)، وإزالة العناصر من قائمة الانتظار، وإعادة ترتيب العناصر في قائمة الانتظار.