يوفّر إطار عمل 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();
تحميل صفيف من عناصر "قائمة المحتوى التالي" في "قائمة المحتوى التالي" باستخدام RemoteMediaClient
المناسبة
queueLoad
تلقّي إشعارات بشأن حالة "قائمة المحتوى التالي"
عندما يحمِّل جهاز الاستقبال عنصرًا من "قائمة المحتوى التالي"، يُحدّد له معرّفًا فريدًا
يبقى محفوظًا طوال مدة الجلسة (ومدة قائمة المحتوى التالي). يمكن لتطبيقك معرفة حالة "قائمة المحتوى التالي" من حيث العنصر الذي يتم تحميله حاليًا
(قد لا يكون قيد التشغيل) أو يتم تحميله أو تم تحميله مسبقًا. تقدّم فئة
MediaStatus
معلومات الحالة التالية:
-
getPreloadedItemId()
method: في حال تم تحميل العنصر التالي مسبقًا، يتم عرض معرّف العنصر المحمَّل مسبقًا. -
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
.
توفّر حزمة تطوير البرامج Cast SDK أيضًا فئتَي أدوات لإنشاء واجهة مستخدم لإضافة المحتوى إلى "قائمة المحتوى التالي".
MediaQueueRecyclerViewAdapter
، للحفاظ على أمان بياناتRecyclerView
MediaQueueListAdapter
، للحفاظ على بيانات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
التي تختار العنصر التالي)،
وإزالة العناصر من قائمة الانتظار، وإعادة ترتيب العناصر في قائمة الانتظار.