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