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